Найти - Пользователи
Полная версия: Не работает модуль python requests через прокси по https-протоколу
Начало » Python для новичков » Не работает модуль python requests через прокси по https-протоколу
1 2
valet
Здравствуйте, уважаемые программисты на python.

Только начал изучать python, пишу небольшой скрипт для работы с твиттером с использованием прокси…

Не могу заставить модуль python requests работать через прокси по https.
С офсайта этого модуля:
If you need to use a proxy, you can configure individual requests with the proxies argument to any request method:

import requests
proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}
requests.get("http://example.org", proxies=proxies)

Но проблема в том, что это почему-то не работает именно для https-протокола.


Вот для наглядности скрипт на python с использованием requests с подключением через прокси, который получает страницы сервисов по получению IP по http и по https протоколам:
#!/usr/bin/env python
#_*_ coding: utf-8 _*_
import requests
proxy_line = 'http://193.106.31.10:8085'
proxies = {
  "http": proxy_line,
  "https": proxy_line,
}
print ('proxy:', proxy_line)
r2 = requests.get("http://ifconfig.me/ip", proxies=proxies) #сервис для получения IP по http-протоколу - это работает
print ('page via http:', r2.text)
r = requests.get("https://ipdb.at/", proxies=proxies) #сервис для получения IP по https-протоколу - это почему-то не работает!
print ('page via https:', r.text)

И вот результат его выполнения:
./test_https.py 
('proxy:', 'http://193.106.31.10:8085')
('page via http:', u'193.106.31.10\n')
('page via https:', u'<html><head><title>400 Bad Request</title></head>\r\n<body><h2>400 Bad Request</h2></body></html>\r\n')

То есть как видим, удается получить страницу по http и выдается ошибка при попытки получения страницы по https.
Используемый мною прокси 193.106.31.10:8085 (привязан к моему IP) точно умеет работать по https, так как аналогичный скрипт на php+curl у меня работает - то есть сервис https://ipdb.at/ успешно возвращает страницу на которой IP 193.106.31.10.

Большая просьба помочь разобраться как с помощью модуля requests работать именно по https-протоколу с использованием прокси, никакое гугление вот уже несколько суток ничего не дает, надежда только на форум.
Lexander
Прокси должен уметь работать с методом CONNECT, чтобы вы могли через HTTP доступаться до HTTPS.
Lexander
Неспособность прокси поддерживать CONNECT, кстати, может как раз вызывать ошибку 400 Bad Request.
По сути, это ошибка синтаксиса HTTP(S) протокола.
pyuser
valet
Не могу заставить модуль python requests работать через прокси по https
Замените urllib3 в пакете на последнюю версию
valet
Lexander
Прокси должен уметь работать с методом CONNECT, чтобы вы могли через HTTP доступаться до HTTPS.
Это он умеет. Аналогичный скрипт на php+curl работает!

Вот такой скрипт на php:
<?php

$proxy_line = 'http://193.106.31.10:8085';
echo “$proxy_line<hr>”;

if( $curl = curl_init() ){
//опции
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);

curl_setopt($curl, CURLOPT_PROXY, "$proxy_line“);

curl_setopt($curl, CURLOPT_URL, ”https://ipdb.at/“);
curl_setopt($curl, CURLOPT_POST, 0);
$out = curl_exec($curl);
echo ”$out“;
}

else echo ”curl_init fail";

?>

Благополучно возвращает:

IP address is numbered 193.106.31.10. This IP address is active in Ukraine. IP Country code is UA. IP address is assigned to “TOO Centr Informacionnyh Technologii”. In organization “TOO Centr Informacionnyh Technologii”. It is also assigned to a hostname unassigned10.citonline.com.ua. IP address longitude is 32.0 and latitude is 49.0.

То есть четко видим что через этот прокси поддерживает работу с https-протоколом.
Вот как написать тоже самое на python? Почему модуль requests это не поддерживает?
valet
pyuser
Замените urllib3 в пакете на последнюю версию
А можно подробнее, как именно это сделать? Я пока совсем слабо ориентируюсь в python что там да как обновляется/заменяется…
Вот я скачал https://pypi.python.org/packages/source/u/urllib3/urllib3-1.7.tar.gz, куда это положить или как установить? В README.rst ни слова об этом…

Попробовал так:
pip install urllib3
Downloading/unpacking urllib3
  Downloading urllib3-1.7.tar.gz (61Kb): 61Kb downloaded
  Running setup.py egg_info for package urllib3
Installing collected packages: urllib3
  Running setup.py install for urllib3
Successfully installed urllib3
Cleaning up...
Как я понимаю установилась как раз последняя версия. Но результаты те же, может нужно еще где-то в самом модуле python requests что-то менять?
valet
Ребята, помогите пожалуйста разобраться. За рабочее решение как заставить модуль python requests работать через прокси по https-протоколу готов заплатить.
Не могу продолжить работу уже который день из-за сабжа…
lorien
Попробуйте через Grab :)
valet
lorien
Попробуйте через Grab
Да, спасибо, через Grab все работает
Видимо в python requests какой-то баг.
pyuser
valet
Видимо в python requests какой-то баг
Баг был в urllib3.
Пакет python_requests включает в себя пакет urllib3, лежит в path_to_requests/packages/urllib3, именно эту папку и нужно подменить.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB