我想弄清楚这一点,但没有运气:
import requests
r = requests.get('http://example.com/m7ppct4', allow_redirects=True)
r.status_code
返回200
,r.content
返回''
。
r.headers
返回以下字典:
{'content-length': '0',
'content-language': 'en-US',
'x-powered-by': 'Servlet/3.0',
'set-cookie': '__cfduid=d4b3d47d43189ac72be14b1d2a2bed98a1408989649815; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.azdoa.gov; HttpOnly, LWJSESSIONID=0000SESSIONMANAGEMENTAFFINI:18h1v85u3; Path=/; HttpOnly, NSC_batubufkpctWTTTM=ffffffff09f39f1545525d5f4f58455e445a4a42378b;expires=Mon, 25-Aug-2014 18:02:49 GMT;path=/;secure;httponly',
'expires': 'Thu, 01 Dec 1994 16:00:00 GMT',
'server': 'cloudflare-nginx',
'connection': 'keep-alive',
'x-ua-compatible': 'IE=EmulateIE9',
'cache-control': 'no-cache="set-cookie, set-cookie2"',
'date': 'Mon, 25 Aug 2014 18:00:49 GMT',
'cf-ray': '15f9b0ff50cf0d6d-LAX',
'content-type': 'application/octet-stream'}
当我在浏览器中打开页面时,我明显得到了内容。
关于我如何进行调试的任何想法?我希望通过requests.get()
电话获取页面内容。
答案 0 :(得分:8)
看起来像tinyurl(azstatejobs)链接的网站根据用户代理过滤请求。欺骗Chrome用户代理为我工作:
import requests
url = 'http://tinyurl.com/m7ppct4'
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36'
headers = {'User-Agent': user_agent}
r = requests.get(url, headers=headers)
(默认情况下allow_redirect
为真)
您可能想尝试不同的用户代理,看看是什么让该网站不像python请求用户代理。
答案 1 :(得分:7)
您必须发送任何用户代理:
import requests
r = requests.get('http://example.com/m7ppct4', headers={'User-Agent':'test'})
答案 2 :(得分:0)
import requests
import json
import pprint
r = requests.get('URL')
pprint.pprint(json.loads(r.content))
答案 3 :(得分:0)
除了缺少 user-agent
标头外,问题还可能与缺少身份验证详细信息有关。
例如下面的代码返回空结果:
import requests
host = 'http://localhost:2080'
path = '/rest/api/2/project'
res = requests.get(f'{host}{path}')
print(res.json())
然后,使用用户名和密码添加身份验证解决了问题:
from requests.auth import HTTPBasicAuth
import requests
host = 'http://localhost:2080'
path = '/rest/api/2/project'
res = requests.get(f'{host}{path}', auth = HTTPBasicAuth('user', 'pass'))
print(res.json())