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',))
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.
cela signifie que requests utilise des socks comme proxy et que socks n'est pas installé.
il suffit d'exécuter
pip install pysocks
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.
dans Ubuntu vous pouvez exécuter :unset all_proxy && unset ALL_PROXY
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).
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.
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.