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

2024-04-25 04:07:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用这个程序从https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY获取json数据 但是从今天早上开始,它就不工作了,因为它返回<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)


Tags: httpsimportcomapijsonchainwwwsymbol
3条回答

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

就连我今天早上也犯了同样的错误。早些时候,我只在印度以外的服务器上遇到这个问题。但现在看来,他们正试图完全停止刮擦

我真的很想找到解决办法

目前看来old website仍在发挥作用。我知道这不是一个永久性的解决方案,但在我找到一个更永久的解决方案之前,我会把它作为权宜之计

试试这个:

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())

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

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

相关问题 更多 >