Python - 请求静默失败

dat*_*den 2 python-requests

import requests
Run Code Online (Sandbox Code Playgroud)

对我的所有请求都正常工作,如下所示:

url = 'http://www.stackoverflow.com'
response = requests.get(url)
Run Code Online (Sandbox Code Playgroud)

bur 以下url不会返回任何结果:

url = 'http://www.billboard.com'
response = requests.get(url)
Run Code Online (Sandbox Code Playgroud)

它停顿并无声地失败,不返回任何内容。

我如何强制requests向我抛出异常响应,以便我知道我是否被列入黑名单?

t.m*_*dam 11

请求不会为错误的 HTTP 响应引发异常,但您可以使用手动raise_for_status引发HTTPError异常,例如:

response = requests.get(url)

response.raise_for_status()
Run Code Online (Sandbox Code Playgroud)

另一个选项是status_code,它保存 HTTP 代码。

response = requests.get(url)

if response.status_code != 200:
    print('HTTP', response.status_code)
else: 
    print(response.text)
Run Code Online (Sandbox Code Playgroud)

如果站点针对错误请求返回 HTTP 200,但响应正文中有错误消息或没有正文,则您必须检查响应内容。

error_message = 'Nothing found'
response = requests.get(url)

if error_message in response.text or not response.text:
    print('Bad response')
else: 
    print(response.text)
Run Code Online (Sandbox Code Playgroud)

如果站点响应时间过长,您可以为请求设置最大超时时间。如果该站点在那段时间内没有响应,ReadTimeout则会引发异常。

try:
    response = requests.get(url, timeout=5)
except requests.exceptions.ReadTimeout:
    print('Request timed out')
else:
    print(response.text)
Run Code Online (Sandbox Code Playgroud)