type requests library example content python-2.7 python-requests socks urllib3

python 2.7 - requests - Las solicitudes de Python "Faltan dependencias para compatibilidad con SOCKS" al usar SOCKS5 desde la Terminal



requests get example python (7)

requests[socks]>=2.10.0 las requests[socks]>=2.10.0 a mis requirements.txt, actualicé mi variable de https_proxy y encontré el error anterior. Luego intenté una pip install requests[socks] regular pip install requests[socks] después de restablecer la variable de PySocks y se instaló PySocks . No estoy seguro de por qué la pip install -Ur requirements.txt no pudo instalar PySocks por primera vez.

Después de eso, pude hacer una solicitud en python usando el proxy socks.

Parece que tu servidor de calcetines no se está comportando. Vería si usted o su administrador pudieran ver los registros y ver de qué se queja la máquina.

Intento interactuar con una API de mi shell de Python 2.7 utilizando un paquete que se basa en las solicitudes de Python. La cosa es que la dirección remota está bloqueada por mi red (biblioteca de la universidad).

Por lo tanto, para hablar con la API, hago lo siguiente:

~$ ssh -D 8080 [email protected]

Y luego, en una nueva terminal, en la computadora local:

~$ export http_proxy=socks5://127.0.0.1:8080 https_proxy=socks5://127.0.0.1:8080

Luego ejecuto el programa en la consola de Python pero falla:

~$ python >>> import myscript >>> id = ''1213'' >>> token = ''jd87jd9'' >>> connect(id,token) File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 518, in post return self.request(''POST'', url, data=data, json=json, **kwargs) File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 475, in request resp = self.send(prep, **send_kwargs) File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 585, in send r = adapter.send(request, **kwargs) File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 370, in send conn = self.get_connection(request.url, proxies) File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 273, in get_connection proxy_manager = self.proxy_manager_for(proxy) File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 169, in proxy_manager_for **proxy_kwargs File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 43, in SOCKSProxyManager raise InvalidSchema("Missing dependencies for SOCKS support.") requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support.

Este extracto es del módulo de solicitudes adapters.py :

> try: > from .packages.urllib3.contrib.socks import SOCKSProxyManager except ImportError: > def SOCKSProxyManager(*args, **kwargs): > raise InvalidSchema("Missing dependencies for SOCKS support.")

Ahora el problema parece haberse originado en SOCKSProxyManager de urllib3.

Así que leí que puede usar SOCKSProxyManager con SOCKS5 si tiene instalado PySocks o si hace una instalación de pip urllib3 [calcetines]

Por desgracia, probé tanto PySocks como urllib3 con Socks sin ningún éxito.

¿Alguna idea de otra solución?

EDITAR:

También probé las solicitudes de instalación de pip [calcetines] (es decir, las solicitudes 2.10.0 con compatibilidad Socks) y estoy obteniendo esto:

File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 467, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: SOCKSHTTPSConnectionPool(host=''api-server.com'', port=443): Max retries exceeded with url: /auth (Caused by NewConnectionError(''<requests.packages.urllib3.contrib.socks.SOCKSHTTPSConnection object at 0x95c7ccc>: Failed to establish a new connection: SOCKS5 proxy server sent invalid data'',))


También tropecé con este problema al hacer una simple pip install -U pip , pero la información que encontré en su pregunta me ayudó a resolver mi problema. Estoy en Mac OS X.

Como ha señalado, adapters.py del paquete de requests intentaba hacer esto:

try: from .packages.urllib3.contrib.socks import SOCKSProxyManager except ImportError: def SOCKSProxyManager(*args, **kwargs): raise InvalidSchema("Missing dependencies for SOCKS support.")

Por lo tanto, parece sensato buscar el lugar de definición de SOCKSProxyManager . Parece estar en un módulo "contrib" en urllib3 y no está instalado junto con urllib3 por defecto. El docstring de ese módulo dice:

This module contains provisional support for SOCKS proxies from within urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) and SOCKS5. To enable its functionality, either install PySocks or install this module with the ``socks`` extra.

Las instrucciones de los documentos pip dicen esto sobre los extras de setuptools:

6. Install a package with setuptools extras. $ pip install SomePackage[PDF] $ pip install git+https://git.repo/some_pkg.git#egg=SomePackage[PDF] $ pip install SomePackage[PDF]==3.0 $ pip install -e .[PDF]==3.0 # editable project in current directory

Entonces seguí las instrucciones y lo hice:

$ pip install ''urllib3[socks]''

Luego continué con pip install -U pip , que era lo que se suponía que debía hacer, y ahora funciona.

Me pregunto cuántas personas quedaron engañadas con los corchetes, ya que Bash y otras shells a menudo lo tratan como un personaje especial, que debe escaparse para que llegue al programa invocado (en este caso, pip).


Tuve el mismo problema con la conda y las solicitudes 2.11 (trabajo en una máquina virtual de Ubuntu detrás de un proxy corporativo).

Este problema me ayudó. Cambié mi variable de entorno all_proxy (que originalmente estaba configurada en un SOCK proxy socks://.... ) a la versión https en mi archivo .bashrc:

export all_proxy="https://<proxy>:<port>/"

y ahora funciona.


Simplemente desactive su variable de entorno all_proxy , y esto debería funcionar. También puede referirse a este problema en github.

En Ubuntu puedes usar el siguiente comando unset all_proxy y reiniciando terminal


Esto significa que las solicitudes usan calcetines como un proxy y que los calcetines no están instalados.

Simplemente ejecuta pip install pysocks


Recibí el mismo error hace solo unos minutos. Luego reinstalé la solicitud [calcetines] a través de pip. Parece que faltaba una parte de los calcetines que es win-inet_pton . Pip lo instaló y el problema está resuelto.


Mi entorno es Ubuntu 16.4 LTS y Python3.5.2 Utilizo pip3 para instalar libs y tengo el mismo problema. así que utilizo el comando unset ALL_PROXY para resolver este problema y funciona.

PD: use printenv | grep -i proxy printenv | grep -i proxy para mostrar la información del proxy.