2017-01-17 3 views
0

функции: Python 2.7.9, запросы 2.12.4, ОС WindowsДобавить прокси-заголовок с помощью запросов питона

s = requests.Session() 
proxy = {'http':'http://ip:port', 
     'https':'http://ip:port'} 
r_url = "https://api.ipify.org" 
s.get(r_url,verify=False,timeout=5,proxies=proxy,headers=headers) 

Проблема: мне нужно добавить заголовок "HOST" для метода HTTP CONNECT. Это не похоже на запросы, или urllib3 отправляет этот заголовок или находится в формате, который не исключается прокси-сервером; «Host»: «api.ipify.org». Добавление заголовка хоста является решением, но я не уверен, что это лучший способ сделать это.

ответ

0

Вы не можете сделать это с помощью запросов AFAIK, вы должны пройти уровень дальше вниз urrllib2:

class ProxyHTTPConnection(httplib.HTTPConnection): 

    _ports = {'http' : 80, 'https' : 443} 


    def request(self, method, url, body=None, headers={}): 
     #request is called before connect, so can interpret url and get 
     #real host/port to be used to make CONNECT request to proxy 
     proto, rest = urllib.splittype(url) 
     if proto is None: 
      raise ValueError, "unknown URL type: %s" % url 
     #get host 
     host, rest = urllib.splithost(rest) 
     #try to get port 
     host, port = urllib.splitport(host) 
     #if port is not defined try to get from proto 
     if port is None: 
      try: 
       port = self._ports[proto] 
      except KeyError: 
       raise ValueError, "unknown protocol for: %s" % url 
     self._real_host = host 
     self._real_port = port 
     httplib.HTTPConnection.request(self, method, url, body, headers) 


    def connect(self): 
     httplib.HTTPConnection.connect(self) 
     #send proxy CONNECT request 
     self.send("CONNECT %s:%d HTTP/1.0\r\n\r\n" % (self._real_host, self._real_port)) 
     #expect a HTTP/1.0 200 Connection established 
     response = self.response_class(self.sock, strict=self.strict, method=self._method) 
     (version, code, message) = response._read_status() 
     #probably here we can handle auth requests... 
     if code != 200: 
      #proxy returned and error, abort connection, and raise exception 
      self.close() 
      raise socket.error, "Proxy connection failed: %d %s" % (code, message.strip()) 
     #eat up header block from proxy.... 
     while True: 
      #should not use directly fp probably 
      line = response.fp.readline() 
      if line == '\r\n': break 

+0

Нет, я должен добавить заголовки к HTTP CONNECT не запрос GET. Заголовок HOST необходимо отправлять при туннелировании через прокси-сервер. Как мне это сделать? – user4642224