2016-02-09 2 views
0

Я кодирую небольшой фрагмент, чтобы извлекать данные с веб-страницы, и я в настоящее время находится за прокси-сервером HTTP/HTTPS. Запросы создаются следующим образом:Запросы HTTPS отправляются без заголовков с запросами Python

headers = {'Proxy-Connection': 'Keep-Alive', 
     'Connection':None, 
     'User-Agent':'curl/1.2.3', 
     } 
r = requests.get("https://www.google.es", headers=headers, proxies=proxyDict) 

На первом, ни HTTP, ни HTTPS работал, а прокси вернулся 403 после запроса. Было также странно, что я мог делать HTTP/HTTPS-запросы с curl, получая пакеты с apt-get или просматривая веб-страницы. Посмотрев на Wireshark, я заметил некоторые отличия между запросом curl и запросом. После установки User-Agent на фальшивую версию curl прокси мгновенно позволяет мне делать HTTP-запросы, поэтому я предположил, что прокси-фильтр запрашивает User-Agent.

Итак, теперь я знаю, почему мой код выходит из строя, и я могу выполнять HTTP-запросы, но код продолжает работать с HTTPS. Я устанавливаю заголовки так же, как и для HTTP, но после просмотра Wireshark в сообщении CONNECT не отправляются заголовки, поэтому прокси-сервер не видит User-Agent и возвращает ответ ACCESS DENIED.

Я думаю, что если бы я мог отправлять заголовки с сообщением CONNECT, я мог бы легко выполнять HTTPS-запросы, но я ломаю голову о том, как сообщить запросам, что я хочу отправить эти заголовки.

ответ

0

Хорошо, поэтому я нашел способ взглянуть на http.client. Это немного более низкий уровень, чем использование запросов, но по крайней мере он работает.

def HTTPSProxyRequest(method, host, url, proxy, header=None, proxy_headers=None, port=443): 
    https = http.client.HTTPSConnection(proxy[0], proxy[1]) 
    https.set_tunnel(host, port, headers=proxy_headers) 
    https.connect() 
    https.request(method, url, headers=header) 
    response = https.getresponse() 
    return response.read(), response.status 

# calling the function 
HTTPSProxyRequest('GET','google.com', '/index.html', ('myproxy.com',8080)) 
Смежные вопросы