Python请求获取返回nse印度网站的响应代码401

Var*_*002 2 python web-scraping python-3.x python-requests

我使用这个程序来获取 json 数据,https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY 但从今天早上开始它在返回时不起作用<Response [401]>。不过,该链接在 chrome 上加载良好。有没有办法在不使用硒的情况下解决这个问题?

import json
import requests

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                         'like Gecko) '
                         'Chrome/80.0.3987.149 Safari/537.36',
           'accept-language': 'en,gu;q=0.9,hi;q=0.8', 'accept-encoding': 'gzip, deflate, br'}

res = requests.get("https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY", headers=headers)
print(res)

Run Code Online (Sandbox Code Playgroud)

Var*_*002 8

尝试这个:

import requests

baseurl = "https://www.nseindia.com/"
url = f"https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                         'like Gecko) '
                         'Chrome/80.0.3987.149 Safari/537.36',
           'accept-language': 'en,gu;q=0.9,hi;q=0.8', 'accept-encoding': 'gzip, deflate, br'}
session = requests.Session()
request = session.get(baseurl, headers=headers, timeout=5)
cookies = dict(request.cookies)
response = session.get(url, headers=headers, timeout=5, cookies=cookies)
print(response.json())
Run Code Online (Sandbox Code Playgroud)

要多次访问 NSE(api)站点,然后cookies在每个后续请求中进行设置:

response = session.get(url, headers=headers, timeout=5, cookies=cookies)

  • 非常感谢 VarunS2002 我过去两天一直在努力寻找这个解决方案,在这里我找到了! (2认同)

小智 0

要执行操作,您首先必须执行登录请求调用,该调用将返回您的会话 ID。然后,该会话 ID 将在下一个请求的标头部分中使用,以进行身份​​验证并返回有效响应