2014-11-14 2 views
0

내 문제를 재현하려면 피들러를 열고 인터넷 트래픽을 시청해야합니다. Fiddler의 proxyurl은 127.0.0.1이고 포트는 8888입니다. 그러나 실제로 HTTPS를 통한 모든 프록시에서이 문제가 발생합니다. HTTPSConnection 클래스를 사용하여, 나는 프록시와 포트를 설정,하지만 난이 오류가 결국 :httlib 및 HTTPSConnection 관련 문제 프록시 (프록시) 사용

'SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol'

이 오류는 잘못된 프록시에 기인 할 수 있지만, 내가 어떤 모든 프록시를 위해 그것을 얻을.

나는 사이트에 POST 작업을 수행하기 위해 파이썬 httlib을 사용하고 있습니다 :

content_type, body = self._encode_multipart_formdata(fields, files) # encodes a file to string, standard multipart post stuff 

    headers = { 
     'content-type': content_type, 
     'content-length': str(len(body)) 
    } 

    if proxy_url: 
     if ssl: 
      h = httplib.HTTPSConnection(proxy_url, proxy_port) 

      h.request('POST', 'https://' + host + selector, body, headers) 

     else: 
      h = httplib.HTTPConnection(proxy_url, proxy_port) 
      h.request('POST', 'http://' + host + selector, body, headers) 
    else: 
     if ssl: 
      h = httplib.HTTPSConnection(host,port) 
      h.request('POST', selector, body, headers) 
     else: 
      h = httplib.HTTPConnection(host,port) 
      h.request('POST', selector, body, headers) 

    resp_data = h.getresponse().read() 
    try: 

     result = json.loads(resp_data) 
    except: 
     return None 

내 파이썬 패키지를 작성하고 코드 라인의 수천, 그래서 정말 요청로 전환 할 수있다 .

재미있는 점은 기본 POST 및 GET 작업을 수행 할 때 urllib2로 작업 (비 멀티 파트 게시물)을 호출 할 수 있다는 것입니다.

알려 주시기 바랍니다.

내가 그것은 당신이 실제로 프록시 요청을 보내는 것을처럼 보이지 않는 파이썬 2.7.5

+0

1. 전체 추적을 게시하십시오. 2.이 오류가 발생하면 호출 한 함수의 매개 변수는 무엇입니까? – User

+0

urllib2로 전환하여 문제를 해결했습니다. 내가 정말로 알아 차리는 유일한 사실은 httplib가 urllib2보다 빨리 파일을 업로드하는 것 같다는 것입니다. –

답변

0

를 사용하고,

을 주셔서 감사합니다. 코드에 따르면 URL에 https:// URL을 사용하여 프록시에 일반 요청을 보내는 것뿐입니다. 이것은 HTTPS 프록시가 작동하는 방식이 아닙니다. 대신 CONNECT 요청을 보내서 터널을 설정 한 다음 소켓을 SSL로 업그레이드하고 마지막으로이 터널 내에서 비 ​​프록시 요청을 보내야합니다.

+0

이 작업을 수행하는 방법에 대한 샘플이 있습니까? –

+0

아니요. 저는 파이썬 전문가가 아니므로 httplib로이 작업을 수행하는 쉬운 방법이 있는지 모르겠습니다. 그러나 당신은'ssl_tunnel' 메쏘드와'sslrwap'을 살펴볼 것입니다. –

+0

나는 그것을 시도해보고 내가 찾은 것을 당신에게 알려줄 것이다. –