2013-07-22 2 views
1

스크립트에 requests 모듈을 사용하고 있는데 get() 메서드의 proxies 매개 변수를 이해하고 싶습니다. This 대답은 proxies 매개 변수의 사용을 설명하기 위해 다음 코드를 게시했습니다요청 모듈의 프록시 매개 변수 이해

  1. 우리는 왜 get() 한 프록시 다음 더 전달됩니다 여기

    http_proxy = "10.10.1.10:3128" 
    https_proxy = "10.10.1.11:1080" 
    ftp_proxy = "10.10.1.10:3128" 
    
    proxyDict = {"http":http_proxy, "https":https_proxy, "ftp":ftp_proxy } 
    
    r = requests.get(url, headers=headers, proxies=proxyDict) 
    

    을 내 질문은? get()은 어떻게 사용합니까? 하나씩 시도합니까?

  2. 프록시가 a.b.c.d:port이라고하면, 프로토콜 유형을 어떻게 알 수 있습니까? hidemyass.com에서 프리미엄 프록시를 구입하면 ip:port 형식의 프록시 만 보내고 프로토콜 유형은 보내지 않습니다. 그렇다면 requests.get() 방법으로 무엇을 전달해야합니까?

나는 프록시에 대해 많이 알지 못하고 작동하는 방식 때문에 이러한 의문을 가지고 있습니다. 누군가가 이것을 설명해 준다면 좋을 것입니다.

답변

5
  1. .get()은 사전의 키가 URL 체계와 일치하는 프록시를 사용합니다. 즉, 'http://www.google.com/'에 액세스하면 키가 'http'인 프록시 (예 : http_proxy)가 사용됩니다. 'https://www.google.com/'에 액세스하는 경우 키가 'https'인 프록시 (예 : https_proxy)가 사용됩니다.

  2. 짧은 대답은 유료 프록시가 HTTP와 HTTPS URL을 모두 받아 들여야한다는 것입니다.

    실제로 이것은 예기치 않은 두 가지 작업을 수행하는 요청에 의해 복잡해집니다. 첫째, 질문에 입력 한 양식 (예 : ip:port)의 프록시 주소를 사용하는 경우 요청은 프록시에 액세스하는 데 사용 된 프로토콜이 프록시중인 프로토콜과 같다고 가정합니다. 즉, http_proxy은 내부적으로 "http://10.10.1.10:3128"https_proxy ~ "https://10.10.1.11:1080"으로 변환됩니다. 이것은 일반적으로 원하는 것이 아니므로 항상 명시 적이어야하며 양식 scheme://ip:port을 사용해야합니다.

    두 번째로 요청은 현재 프록시를 통해 HTTPS에 실제 문제가 있다는 것입니다. 일반적으로 실제로는 작동하지 않는다고 가정해야하지만 실제로는 조금 복잡합니다.

    이러한 두 가지 문제는 계획된 V2.0 릴리스에서 해결 될 가능성이 있습니다.

자세히 알고 싶으면 요청의 프록시에 대해 written a blog post을 입력했습니다.

프록시가 작동하는 방법은 HTTP 요청을 받아 들여 목적지로 전달하는 것입니다. 일반적으로 HTTP 요청을 변경하거나 (또는 ​​잠재적으로 완전히 삭제하는) HTTP 요청/응답을 캐시하는 두 가지 이유 중 하나로 인해 사용됩니다. Wikipedia에는 시작하기 좋은 기사가 있습니다.

+0

+1. Thats는 훌륭한 대답입니다. :-) – Nawaz

+1

참고 : 'http'와'https'모두에 대해 * same *'http : //'url을 사용하고 싶을 것입니다. 'https : //'프록시 URL은 가장 틀린 것입니다.('curl '은 예를 들어 완전히 스킴을 도입하고 최소한'http'와'https'에 대해'http : //'를 사용합니다) –