https Get 请求在第一次尝试时失败 - python 请求

如何解决https Get 请求在第一次尝试时失败 - python 请求

在 api.nasdaq.com 上执行 GET 请求时,我收到错误响应 400 - 该请求的标头名称无效。 但是如果我在浏览器中点击相同的 URL,它会返回一个有效的响应。

同样在通过浏览器点击 url 之后,下面的代码就可以正常工作了。如果我为符号变量使用新值,那么它再次失败并显示 400 。每次我在浏览器中尝试 url 然后运行此代码时,它都可以工作,但不是第一次。

这种行为是由于使用了 cookie 吗?任何帮助表示赞赏。

import requests

symbol = 'ALB'
url = "https://api.nasdaq.com/api/quote/{}/historical?assetclass=stocks&fromdate=2021-07-06&todate=2021-07-07".format(symbol)
headers = {
                "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Encoding":"gzip,deflate,br","Accept-Language":"en-US,en;q=0.9","Connection":"keep-alive","User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/64.0.3282.119 Safari/537.36","cache - control":"max-age=0,no-cache,no-store","upgrade-insecure-requests": "1"
    }
response = requests.get(url,headers = headers,verify=True)
if response.status_code != 200:
    print("download response code:{}".format(response.status_code))
    print("download response text:{}".format(response.text))
else:
    print(response.text)

失败响应:

download response code:400
download response text:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<Meta HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Header</h2>
<hr><p>HTTP Error 400. The request has an invalid header name.</p>
</BODY></HTML>

可以用来测试的各种符号是 AMZN、AAPL、MSFT、ALB、ABC、SQ

解决方法

使用这些标头让我得到 200 响应。我将缓存控制和升级不安全请求大写。

很遗憾,我无法帮助您解决 cookie 使用问题。

headers = {
                "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Encoding":"gzip,deflate,br","Accept-Language":"en-US,en;q=0.9","Connection":"keep-alive","User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/64.0.3282.119 Safari/537.36","Cache-Control":"max-age=0,no-cache,no-store","Upgrade-Insecure-Requests": "1"
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?