程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在服务器上运行的 Python 脚本无法成功执行对 NASDAQ 端点的 GET 请求大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在服务器上运行的 Python 脚本无法成功执行对 NASDAQ 端点的 GET 请求?

开发过程中遇到在服务器上运行的 Python 脚本无法成功执行对 NASDAQ 端点的 GET 请求的问题如何解决?下面主要结合日常开发的经验,给出你关于在服务器上运行的 Python 脚本无法成功执行对 NASDAQ 端点的 GET 请求的解决方法建议,希望对你解决在服务器上运行的 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,请注明来意。