¿Las solicitudes HTTP a través del módulo de solicitudes de Python no funcionan a través del proxy donde hace curl? ¿Por qué?

Al usar este comando de curl, puedo obtener la respuesta que estoy buscando de Bash

curl -v -uz:secret_key --proxy http://proxy.net:80 \ -H "Content-Type: application/json" https://service.com/data.json 

Ya he visto este otro post en proxies con el módulo de solicitudes

Y me ayudó a formular mi código en Python, pero necesito hacer una solicitud a través de un proxy. Sin embargo, incluso mientras se proporcionan los proxies adecuados, no funciona. Tal vez simplemente no estoy viendo algo?

 >>> requests.request('GET', 'https://service.com/data.json', \ >>> headers={'Content-Type':'application/json'}, \ >>> proxies = {'http' : "http://proxy.net:80",'https':'http://proxy.net:80'}, \ >>> auth=('z', 'secret_key')) 

Además, en la misma consola de Python puedo usar urllib para hacer una solicitud para que tenga éxito.

 >>> import urllib >>> urllib.urlopen("http://www.httpbin.org").read() ---results--- 

Incluso intentar solicitudes en una dirección que no sea https no funciona.

     >>> requests.get('http://www.httpbin.org') Traceback (most recent call last): File "", line 1, in  File "/Library/Python/2.6/site-packages/requests/api.py", line 79, in get return request('get', url, **kwargs) File "/Library/Python/2.6/site-packages/requests/api.py", line 66, in request prefetch=prefetch File "/Library/Python/2.6/site-packages/requests/sessions.py", line 191, in request r.send(prefetch=prefetch) File "/Library/Python/2.6/site-packages/requests/models.py", line 454, in send raise ConnectionError(e) requests.exceptions.ConnectionError: Max retries exceeded for url: 

    Las solicitudes son tan elegantes y asombrosas, pero ¿cómo podría estar fallando en este caso?

    El problema radica en realidad en las bibliotecas estándar de acceso url de python: urllib / urllib2 / httplib. No puedo recordar qué biblioteca es el culpable exacto, pero para simplificar, llamémoslo urllib. Desafortunadamente, urllib no implementa el método de conexión HTTP que se requiere para acceder a un sitio https a través de un proxy http (s). Mis esfuerzos para agregar la funcionalidad usando urllib no han tenido éxito (ha pasado un tiempo desde que lo intenté). Desafortunadamente, la única opción que conozco para trabajar es usar pycurl para este caso.

    Sin embargo, hay una solución relativamente limpia que es casi exactamente la misma API que las solicitudes de python, pero utiliza un servidor de pycurl en lugar de las bibliotecas estándar de python.

    La biblioteca se llama human_curl . Lo he usado yo mismo y he tenido grandes resultados.

    Creyendo por encima de la respuesta intentamos human_curl

    human_curl dio errores como Errores desconocidos, mientras que urllib3 dio errores correctos como Solicitud agotada, Max rebashs superados con url.

    Entonces, volvimos a urllib3, urllib3 es seguro para subprocesos. Estamos contentos con urllib3.

    El único problema ahora es “Max rebashs superados”. No podemos resolverlo. Supongo que podría tener que ver con el servidor / proxy, pero no estoy seguro.