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