Python 请求不返回响应

时间:2021-05-24 15:12:11

标签: python python-requests

1 - 目标域是 https://www.dnb.com/

该网站阻止了世界上许多国家/地区的访问,包括我所在的国家/地区(阿尔及利亚)。

所以已知的解决方案很清楚(使用代理),我做到了。

2 - 在网络配置中配置系统代理,并通过(谷歌浏览器)连接到网站,使用 Firefox 和代理设置也可以正常工作。

3 - 我来到我的代码开始工作

import requests


# 1. Initialize the proxy
proxy = "xxx.xxx.xxx.xxx:3128"

# 2. Setting the Headers (I cloned Firefox request headers)
headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0",
        "Accept-Encoding": "gzip, deflate, br",
        "Connection": "keep - alive",
        "Accept": "text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q = 0.8",
        "Upgrade - Insecure - Requests": "1",
        "Host": "www.dnb.com",
        "DNT": "1"
    }

# 3. URL
URL = "https://www.dnb.com/business-directory/company-profiles.bicicletas_monark_s-a.7ad1f8788ea84850ceef11444c425a52.html"

# 4. Make a get request.
r = requests.get(URL, headers=headers, proxies={"https": proxy}) 
# Nothing in return and program keep executing (like infinite loop).

注意: 我知道这一直在等待,因为默认的 timeout 设置为 None,但可以确定设置正在运行,并且请求库必须使用这里的timeout可以以评估代理的可靠性为例。

所以,这是什么原因,它卡住了(我也是),我用相同的配置(Firefox、Chrome、Postman)得到了响应和正确的 HTML 内容。

1 个答案:

答案 0 :(得分:0)

我检查了你的代码并在我的本地机器上运行了它。似乎问题出在代理上。我添加了一个公共代理,它正在工作。您可以通过向 requests.get 函数添加一个“超时”参数来确认它几秒钟。此外,如果代码正常工作(即使响应是 403),也意味着代理存在问题。