如何为python http连接指定经过身份验证的代理?

Reh*_*aja 50 python proxy http

在python中为http连接指定具有用户名和密码的代理的最佳方法是什么?

ber*_*sch 57

这对我有用:

import urllib2

proxy = urllib2.ProxyHandler({'http': 'http://
username:password@proxyurl:proxyport'})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)

conn = urllib2.urlopen('http://python.org')
return_str = conn.read()
Run Code Online (Sandbox Code Playgroud)


duc*_*ucu 15

设置名为http_proxy的环境var,如下所示:http:// username:password @ proxy_url:port

  • 但并没有真正回答答案. (4认同)

gz.*_*gz. 9

通过需要身份验证的代理的最佳方法是使用urllib2构建自定义url开启程序,然后使用它来创建您想要通过代理的所有请求.特别要注意,您可能不希望在url或python源代码中嵌入代理密码(除非它只是一个快速的黑客).

import urllib2

def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme="http"):
    password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    password_mgr.add_password(None, proxyurl, proxyuser, proxypass)

    proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl})
    proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)

    return urllib2.build_opener(proxy_handler, proxy_auth_handler)

if __name__ == "__main__":
    import sys
    if len(sys.argv) > 4:
        url_opener = get_proxy_opener(*sys.argv[1:4])
        for url in sys.argv[4:]:
            print url_opener.open(url).headers
    else:
        print "Usage:", sys.argv[0], "proxy user pass fetchurls..."
Run Code Online (Sandbox Code Playgroud)

在更复杂的程序中,您可以根据需要分离这些组件(例如,在应用程序的生命周期内仅使用一个密码管理器).python文档中有更多关于如何使用urllib2执行复杂操作的示例,您可能也会发现它们很有用.


Ami*_*ini 8

用这个:

import requests

proxies = {"http":"http://username:password@proxy_ip:proxy_port"}

r = requests.get("http://www.example.com/", proxies=proxies)

print(r.content)
Run Code Online (Sandbox Code Playgroud)

我认为这比使用简单得多urllib.我不明白为什么人们喜欢urllib这么用.