Dom*_*Dom 4 python curl urllib http-headers python-requests
我尝试使用Python 在Treasury Direct上请求RSS提要。过去,我曾使用urllib或请求库来达到此目的,并且效果很好。但是,这次,我继续收到406状态错误,据我了解,这是页面告诉我它不接受请求中标头详细信息的方式。我已经尝试将其更改为无济于事。
这就是我尝试过的方式
import requests
url = 'https://www.treasurydirect.gov/TA_WS/securities/announced/rss'
user_agent = {'User-agent': 'Mozilla/5.0'}
response = requests.get(url, headers = user_agent)
print response.text
Run Code Online (Sandbox Code Playgroud)
环境: Python 2.7和3.4。我也尝试通过curl进行访问,并具有完全相同的错误。
我认为这是特定于页面的,但是无法弄清楚如何适当地构造阅读此页面的请求。
我在页面上找到了一个API,可以在json中读取相同的数据,因此对我来说,这个问题比真正的问题更令人好奇。
任何答案将不胜感激!
标头详细信息
{'surrogate-control': 'content="ESI/1.0",no-store', 'content-language': 'en-US', 'x-content-type-options': 'nosniff', 'x-powered-by': 'Servlet/3.0', 'transfer-encoding': 'chunked', 'set-cookie': 'BIGipServerpl_www.treasurydirect.gov_443=3221581322.47873.0000; path=/; Httponly; Secure, TS01598982=016b0e6f4634928e3e7e689fa438848df043a46cb4aa96f235b0190439b1d07550484963354d8ef442c9a3eb647175602535b52f3823e209341b1cba0236e4845955f0cdcf; Path=/', 'strict-transport-security': 'max-age=31536000; includeSubDomains', 'keep-alive': 'timeout=10, max=100', 'connection': 'Keep-Alive', 'cache-control': 'no-store', 'date': 'Sun, 23 Apr 2017 04:13:00 GMT', 'x-frame-options': 'SAMEORIGIN', '$wsep': '', 'content-type': 'text/html;charset=ISO-8859-1'}
Run Code Online (Sandbox Code Playgroud)
您需要添加accept到标头请求:
import requests
url = 'https://www.treasurydirect.gov/TA_WS/securities/announced/rss'
headers = {'accept': 'application/xml;q=0.9, */*;q=0.8'}
response = requests.get(url, headers=headers)
print response.text
Run Code Online (Sandbox Code Playgroud)