Les requêtes de Python "manque de dépendances pour le support des SOCKS" lors de L'utilisation de SOCKS5 à partir du Terminal

j'essaie d'interagir avec une API de mon shell python 2.7 en utilisant un paquet qui s'appuie sur les requêtes de Python. La chose est l'adresse distante est bloquée par mon réseau (bibliothèque universitaire).

alors pour parler à L'API je fais ce qui suit:

~$ ssh -D 8080 name@myserver.com

et puis, dans le nouveau terminal, dans l'ordinateur local:

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

puis j'exécute le programme dans la console Python mais échoue:

~$ 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.

Cet extrait est tiré de l' adapters.py les demandes module:

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

Maintenant le problème semble provenir de urllib3 de SOCKSProxyManager.

donc j'ai lu que vous pouvez utiliser SOCKSProxyManager avec SOCKS5 si vous avez installé PySocks ou vous faire un pip install urllib3[socks]

hélas, j'ai essayé les deux PySocks et urllib3 avec des chaussettes sans aucun succès.

Toute idée d'une autre solution de contournement?

EDIT:

j'ai aussi essayé pip install demandes[chaussettes] (demandes 2.10.0 avec des Chaussettes de soutien) et j'obtiens ceci:

  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',))
20
demandé sur BringBackCommodore64 2016-08-05 19:35:56

8 réponses

j'ai eu le même problème avec conda et requests 2.11 (je travaille dans une VM Ubuntu derrière un mandataire d'entreprise).

Ce problème m'a aidé. J'ai changé ma variable d'environnement all_proxy (qui était à l'origine défini à un proxy de chaussettes socks://....) à la version https dans my .bashrc fichier :

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

et maintenant ça fonctionne.

66
répondu Guillaume Mohr 2016-10-10 13:23:53

cela signifie que requests utilise des socks comme proxy et que socks n'est pas installé.

il suffit d'exécuter pip install pysocks

21
répondu louis_guitton 2017-06-04 11:32:10

j'ai ajouté requests[socks]>=2.10.0 à mes besoins.txt, mis à jour mon https_proxy variable env, et est tombé sur l'erreur ci-dessus. J'ai ensuite essayé un régulier pip install requests[socks] après avoir réinitialisé le https_proxy env variable et PySocks a été installé. Je ne sais pas pourquoi pip install -Ur requirements.txt échec de L'installation de PySocks la première fois.

après cela, j'ai pu faire une requête en python en utilisant le proxy socks.

il semble que votre serveur de chaussettes ne se comporte pas. Je voudrais savoir si vous ou votre administrateur, de regarder les bûches et voir de quoi la machine se plaint.

10
répondu Kirk 2016-08-08 18:27:18

dans Ubuntu vous pouvez exécuter :

unset all_proxy && unset ALL_PROXY

3
répondu user8813455 2018-04-17 13:46:35

unset all_proxy variable d'environnement, et cela devrait fonctionner. Aussi, vous pouvez vous référer à ce problème dans github.

Sur Ubuntu, vous pouvez utiliser la commande suivante unset all_proxy et redémarrez le terminal

2
répondu latsha 2017-01-24 06:42:02

j'ai aussi trébuché sur cette question en faisant un simple pip install -U pip, mais l'information que j'ai trouvée à partir de votre question m'a aidé à résoudre mon problème. I am on Mac OS X.

Comme vous l'avez souligné, adapters.pyrequests package essayait de faire ceci:

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

il semble Donc raisonnable de chercher les lieu de définition de SOCKSProxyManager. Il semble être dans un module" contrib " dans urllib3 et non installé à côté d'urllib3 par défaut. Le document de ce module dit:

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.

les instructions du pip docs dit ceci à propos de setuptools extras:

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

alors j'ai suivi les instructions et j'ai fait:

$ pip install 'urllib3[socks]'

j'ai ensuite poursuivi avec pip install -U pip, ce que je devais faire, et maintenant ça marche.

je me demande combien de personnes se sont fait piéger-up par les crochets, comme Bash et d'autres coquillages traitent souvent comme un caractère spécial, qui doit être échappé pour rejoindre le programme appelé (dans ce cas, le programme pep).

2
répondu easoncxz 2017-03-15 12:58:23

j'ai eu la même erreur il y a quelques minutes.Puis ré-installé demande[chaussettes] via pip. Il semble qu'il manquait une partie de chaussettes qui est win-inet_pton. Pip installé et le problème est résolu.

2
répondu phosphorus 2017-08-09 20:45:47

mon environnement est Ubuntu 16.4 LTS et Python3.5.(2) J'utilise pip3 pour installer libs a le même problème. j'ai donc utiliser la commande unset ALL_PROXY pour résoudre ce problème et cela fonctionne.

PS: utilisez printenv | grep -i proxy pour afficher le proxy info.

1
répondu Kiah Han 2017-09-01 17:16:11