[英]How to get status code 200 instead of 401 from api calls json response
在将用户代理包含为 header 之前,我得到了 403,在注入用户代理之后,我得到了 401。我不明白我怎样才能得到 200 响应。
import requests
import json
#url:https://www.barchart.com/stocks/quotes/MSFT/competitors?quoteSectors=-INO&page=1&orderBy=weightedAlpha&orderDir=desc
headers = {
"x-xsrf-token": "eyJpdiI6IlhXSVFja0FhdzV1L3ZtRXBmbDFieXc9PSIsInZhbHVlIjoicUllR0hFL2NWbysxL2pjSVoyR2ZYYk03Zk42Qmh3MGJqckhSRUE3Vi9PREp1ME9jMVJlK2djSHNWRmVQWmcvRkxpM2VIUlFLTFZma2J2c2VLNDd5cGdJV0JnVEM2T0ZzUS9KTzJJSUFIWVlud0w0eGtyUzRRdHdlT2RKMVJPcFEiLCJtYWMiOiIzNjgxZTA1NTAyMjZiZGE2NGU1NmYwYjMxMTVjNjA3ZmU1Mjg0NTRjODA1OTdlNTZmYjU4YTFlNGFlMjkwZDQzIn0=",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
}
params = {
"symbol": "MSFT",
"lists": "stocks.inSector.all(-INO)",
"fields": "symbol,symbolName,weightedAlpha,lastPrice,priceChange,percentChange,highPrice1y,lowPrice1y,percentChange1y,tradeTime,symbolCode,symbolType,hasOptions",
"orderBy": "weightedAlpha",
"orderDir": "desc",
"meta": "field.shortName,field.type,field.description,lists.lastUpdate",
"hasOptions": "true",
"page": "1",
"limit": "100",
"raw": "1"
}
api_url = 'https://www.barchart.com/proxies/core-api/v1/quotes/get?'
s=requests.Session()
req = s.get(api_url, headers=headers, params=params)
print(req)
您已经非常接近正确了,cookies 由着陆页(您已注释掉)设置,因此您需要在那里 go 并将它们添加到 s 变量中。 然后,您正确地将 xsrf 令牌添加到您的标头中,但这需要是您登陆登录页面后响应 header 中的那个。 此外,它是 URL 编码并需要解码,这可以通过用等号替换最终的 %3D 来完成 =
请参见下面的示例:
import requests
s = requests.Session()
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
}
url = 'https://www.barchart.com/stocks/quotes/MSFT/competitors?quoteSectors=-INO&page=1&orderBy=weightedAlpha&orderDir=desc'
landing_page = s.get(url,headers=headers)
print(landing_page)
cookies = s.cookies.get_dict()
params = {
"symbol": "MSFT",
"lists": "stocks.inSector.all(-INO)",
"fields": "symbol,symbolName,weightedAlpha,lastPrice,priceChange,percentChange,highPrice1y,lowPrice1y,percentChange1y,tradeTime,symbolCode,symbolType,hasOptions",
"orderBy": "weightedAlpha",
"orderDir": "desc",
"meta": "field.shortName,field.type,field.description,lists.lastUpdate",
"hasOptions": "true",
"page": "1",
"limit": "100",
"raw": "1"
}
new_headers = {
'accept':'application/json',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
'x-xsrf-token':cookies['XSRF-TOKEN'].replace('%3D','=')}
api_url = 'https://www.barchart.com/proxies/core-api/v1/quotes/get?'
req = s.get(api_url, headers=new_headers, params=params).json()
print(req)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.