通过代理服务器发送HTTP请求

1 投票
1 回答
6081 浏览
提问于 2025-04-18 08:52

我尝试使用urllib2通过代理服务器发送http请求,但不幸的是我没能成功。

    proxy_server = {"http":"86.51.26.13:8080"}
    proxy = urllib2.ProxyHandler(proxy_server)
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)

    response = urllib2.urlopen("http://www.whatismyip.com/").read()
    print response

使用上面的代码时,我遇到的错误是:

urllib2.HTTPError: HTTP错误 403: 禁止访问

代理服务器是正常的(我可以在Firefox中使用它)。

而且,我在Wireshark中看不到我的电脑与目标地址之间有任何通信,这真的很奇怪(urllib2是怎么判断http错误代码的呢?)

有没有什么建议?

1 个回答

0

我觉得你的代码差不多是对的,只需要告诉你的脚本用什么协议跟代理通信。试试这个:

import urllib2

proxy_server = {"http":"http://86.51.26.13:8080"}
proxy = urllib2.ProxyHandler(proxy_server)
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)

response = urllib2.urlopen("http://www.whatismyip.com").read()
print response

这里的第一个http表示这个代理会处理http请求,但如果你想的话,也可以通过代理用https来传输。

你可能会觉得这段代码不错,但我个人更喜欢requests这个库,它让http请求的代码更容易阅读。看看用requests写的等价代码:

import requests
proxies = {
  "http":"http://86.51.26.13:8080"
}

response = requests.get("http://www.whatismyip.com", proxies=proxies)
print response

撰写回答