大佬教程收集整理的这篇文章主要介绍了在服务器上运行的 Python 脚本无法成功执行对 NASDAQ 端点的 GET 请求,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我开发了一个脚本,需要从这个站点获取Json数据:
@L_403_0@
在我的机器上本地开发时,此代码有效:
# gets all symbols from NYSE,NASDAQ,AMEX
headers = {
"User-Agent": "Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/91.0.4472.114 Safari/537.36",}
res = requests.get("https://API.nasdaq.com/API/screener/stocks?tabLeonly=true&offset=0&download=true",headers=headers)
但是,一旦我将此代码移动到运行 Ubuntu 20.04 的公共服务器,请求就停止工作,并开始无限期挂起。该请求甚至不会返回响应。
我尝试使用 Chrome 开发人员工具复制浏览器在访问此 API 时发出的 cURL 请求,并在服务器上运行纯 curl 命令,执行此操作时,请求成功并返回正确的数据。但是,一旦我将 cURL 命令分解并放入 Python(和 php)代码中,它就无法工作并返回无限期挂起。
我正在处理的服务器上没有定义出站网络规则,也没有任何防火墙或 IDS 处于活动状态。也没有关于 API 等 IP 限制的文档。
更新:我什至在安装了 Chrome 的 windows 10 完整副本的 EC2 实例上尝试了相同的脚本(基本上模仿了我的本地 PC),但请求仍然挂起。
有什么想法吗?
事实证明,纳斯达克在其端点上有反抓取措施。
我假设他们的 API 允许来自他们声明为个人机器的请求,但不允许来自服务器的请求,因为他们的 API 在技术上是企业级的。
我的问题的解决方案是增强标头以模拟来自有效 API 用户的调用:
headers = {
'authority': 'api.nasdaq.com','accept': 'application/json,text/plain,*/*','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/87.0.4280.141 Safari/537.36','origin': 'https://www.nasdaq.com','sec-fetch-site': 'same-site','sec-fetch-mode': 'cors','sec-fetch-dest': 'empty','referer': 'https://www.nasdaq.com/','accept-language': 'en-US,en;q=0.9',}
从端点成功返回所需信息。
以上是大佬教程为你收集整理的在服务器上运行的 Python 脚本无法成功执行对 NASDAQ 端点的 GET 请求全部内容,希望文章能够帮你解决在服务器上运行的 Python 脚本无法成功执行对 NASDAQ 端点的 GET 请求所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。