2014-10-22 2 views
1

urllib2를 사용하고 다른 IP 주소에서 요청하고 싶습니다.다른 IP 주소에서 요청

나는이 문제를 확인했지만 나는 운이없는 오전 : 링크에서 Source interface with Python and urllib2

코드 :

class BoundHTTPHandler(urllib2.HTTPHandler): 

    def __init__(self, source_address=None, debuglevel=0): 
     urllib2.HTTPHandler.__init__(self, debuglevel) 
     self.http_class = functools.partial(httplib.HTTPConnection, 
       source_address=source_address) 

    def http_open(self, req): 
     return self.do_open(self.http_class, req) 

# test 
handler = BoundHTTPHandler("192.168.1.1", 0) 
opener = urllib2.build_opener(handler) 
urllib2.install_opener(opener) 
urllib2.urlopen("http://google.com/").read() 

오류 : 형식 오류 : 초기화() 예기치 않은 키워드 인수 'source_address'

있어

그리고 urllib2를 사용하기 전에이 코드를 어떻게 실행합니까?

import socket 
true_socket = socket.socket 
def bound_socket(*a, **k): 
    sock = true_socket(*a, **k) 
    sock.bind((sourceIP, 0)) 
    return sock 
socket.socket = bound_socket 

그렇다면 bound_socket 함수를 사용하면됩니다.

편집 파이썬 버전이 source_address를 지원하지 않는다고 생각합니다. 따라서 나는 오류가 발생합니다.

그럼 소켓 코드를 사용해 보겠습니다.

+0

당신의 파이썬 버전은 무엇입니까? – jfs

+0

여기에 monkey-patches'socket'이있는 코드 예제가 있으며, 파이썬 2.4+에서'urllib2'에 대한 SSL 클라이언트/서버 인증서 검증을 지원하기 위해'HTTPSHandler()'를 정의합니다 (https://gist.github.com/). zed/1347055). 이것은 파이썬 2.4+에서'source_address'를 활성화 할 수 있음을 보여줍니다 (이것은 ssl을 활성화하는 것보다 간단합니다). – jfs

+0

세 바스 챤이 옳습니다. 파이썬 버전은 무엇입니까? 파이썬 2.6에서는 HTTPConnection이 source_address를 __init __()의 인수로 사용하지 않습니다. –

답변

관련 문제