랭귀지/python

urllib2 그리고 프록시

유키공 2017. 12. 19. 16:30

urllib2로 프록시를 사용할 수 있다.

# 프록시 주소와 포트:
proxy_info = { 'host' : 'proxy.myisp.com',
               'port' : 3128
             }

# 
프록시를 위하여 처리자를 만든다
proxy_support = urllib2.ProxyHandler({"http" : "http://%(host)s:%(port)d" % proxy_info})

# 
이 처리자를 사용하는 개방자(opener)를 만든다:
opener = urllib2.build_opener(proxy_support)

# 
다음 이 개방자를 urllib2를 위한 기본 개방자로 설치한다:
urllib2.install_opener(opener)

# 
이제 HTTP 요청을 전송할 수 있다:
htmlpage = urllib2.urlopen("http://sebsauvage.net/").read(200000)


이
 트릭이 멋진 이유는 전체 프로그램을 위하여 프록시 매개변수들을 설정해 주기 때문이다.


프록시에
 인증이 필요하면, 역시 그것도 할 수 있다!

proxy_info = { 'host' : 'proxy.myisp.com',
               'port' : 3128,
               'user' : 'John Doe',
               'pass' : 'mysecret007'
             }
proxy_support = urllib2.ProxyHandler({"http" : "http://%(user)s:%(pass)s@%(host)s:%(port)d" % proxy_info})
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
htmlpage = urllib2.urlopen("http://sebsauvage.net/").read(200000)

(이 코드 조각은 주로 http://groups.google.com/groups?selm=mailman.983901970.11969.python-list%40python.org에서 영감을 얻었다. )


파이썬
 2.4.2부터, urllib2는 오직 다음의 프록시 인증 방법만 지원한다: Basic 그리고 Digest.
프록시가
 (윈도우즈/IE-종속적인) NTLM을 사용하면, 운이 따르지 않는 것이다.


이
 트릭 외에도, 더 간단하게 프록시를 설정하는 방법이 있다:

import os
os.environ['HTTP_PROXY'] = 'http://proxy.myisp.com:3128'


os.environ['FTP_PROXY']
로도 똑같이 할 수 있다.