我有一个网站,它使用 2 个 API 调用来构建下载 gzip 文件的实际链接,问题是标头发生了很大变化,我认为 cookie 也发生了很大变化,我尝试找出哪些是那些保持不变,其他领域正在以何种方式发生变化,但到目前为止还没有运气。 网站是这个
我正在使用
urlib
库,如下所示:
request = urllib.request.Request(link, headers = headers)
response = urllib.request.urlopen(request)
我使用以下网站来查找应包含在您将执行的请求中的正确标头。
通常,您不需要在请求中发送 Cookie,但由于某种原因,您的网站有时没有它们就无法工作(或者也可能是其他原因)。
我使用此代码来获取 cookie 的值:
import http.cookiejar
cookie_value = ""
cookie_jar = http.cookiejar.CookieJar()
cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(cookie_processor)
response = opener.open(base_url)
for cookie in cookie_jar:
cookie_value += f"{cookie.name}={cookie.value},"
cookie_value = cookie_value[:-1]
然后我将其插入到从上述网站获得的标题中:
headers1 = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US,en;q=0.9",
"Connection": "keep-alive",
"Cookie": f"{cookie_value}",
"Host": "prices.super-pharm.co.il",
"Referer": f"{base_url}/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
}
headers2 = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
'Referer': f'{base_url}/',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
"Cookie": f"{cookie_value}",
}
然后我使用以下代码来获取 gzip 文件的最终 API URL:
link1 = f"{base_url}{href1}"
request = urllib.request.Request(link1, headers=headers1)
response = urllib.request.urlopen(request)
res = response.read()
_decode = ast.literal_eval(res.decode("utf-8"))
_decode = _decode['href']
link2 = f"http://prices.super-pharm.co.il{_decode}".replace('\/', '//')
request = urllib.request.Request(link2 , headers = headers2)
response = urllib.request.urlopen(request)
最后您可以使用
response
来获取您的文件。