繁体   English   中英

如何从 api 调用 json 响应中获取状态码 200 而不是 401

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM