izh*_*hak 61 python proxy socks python-requests
我在我的Python脚本中使用了很棒的Requests库:
import requests
r = requests.get("some-site.com")
print r.text
Run Code Online (Sandbox Code Playgroud)
我想用socks代理.但是Requests现在只支持HTTP代理.
我怎样才能做到这一点?
dvs*_*ska 92
现代方式:
pip install -U requests[socks]
Run Code Online (Sandbox Code Playgroud)
然后
import requests
resp = requests.get('http://go.to',
proxies=dict(http='socks5://user:pass@host:port',
https='socks5://user:pass@host:port'))
Run Code Online (Sandbox Code Playgroud)
小智 43
自2016-04-29发布的requests版本2.10.0起,requests支持SOCKS.
它需要PySocks,可以安装pip install pysocks.
用法示例:
import requests
proxies = {'http': "socks5://myproxy:9191"}
requests.get('http://example.org', proxies=proxies)
Run Code Online (Sandbox Code Playgroud)
Mah*_*emi 33
如果有人尝试了所有这些较旧的答案,并且仍然遇到如下问题:
requests.exceptions.ConnectionError:
SOCKSHTTPConnectionPool(host='myhost', port=80):
Max retries exceeded with url: /my/path
(Caused by NewConnectionError('<requests.packages.urllib3.contrib.socks.SOCKSConnection object at 0x106812bd0>:
Failed to establish a new connection:
[Errno 8] nodename nor servname provided, or not known',))
Run Code Online (Sandbox Code Playgroud)
这可能是因为默认情况下,requests配置为解析连接本地端的DNS查询.
尝试将代理网址从更改socks5://proxyhost:1234为socks5h://proxyhost:1234.请注意额外的h(它代表主机名解析).
PySocks包模块的默认设置是进行远程解决,我不确定为什么请求使它们的集成变得模糊不清,但我们就是这样.
lqh*_*gbl 15
你需要安装pysocks,我的版本是1.0,代码适合我:
import socket
import socks
import requests
ip='localhost' # change your proxy's ip
port = 0000 # change your proxy's port
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, ip, port)
socket.socket = socks.socksocket
url = u'http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=inurl%E8%A2%8B'
print(requests.get(url).text)
Run Code Online (Sandbox Code Playgroud)
您可以使用环境变量运行脚本https_proxy。
pip install PySocks
pip install pysocks5
Run Code Online (Sandbox Code Playgroud)
export https_proxy=socks5://<hostname or ip>:<port>
Run Code Online (Sandbox Code Playgroud)
echo Your real IP
python -c 'import requests;print(requests.get("http://ipinfo.io/ip").text)'
echo IP with socks-proxy
python -c 'import requests;print(requests.get("https://ipinfo.io/ip").text)'
Run Code Online (Sandbox Code Playgroud)
一旦python requests将与SOCKS5pull request 合并,它将像使用proxiesdictionary 一样简单:
#proxy
# SOCKS5 proxy for HTTP/HTTPS
proxies = {
'http' : "socks5://myproxy:9191",
'https' : "socks5://myproxy:9191"
}
#headers
headers = {
}
url='http://icanhazip.com/'
res = requests.get(url, headers=headers, proxies=proxies)
Run Code Online (Sandbox Code Playgroud)
请参阅SOCKS代理支持
如果您无法等待request准备就绪requesocks而又无法使用时(例如由于缺少pwd内置模块而在GoogleAppEngine上),另一种选择是使用上面提到的PySocks:
socks.py从仓库中获取文件,并将副本放入您的根文件夹中;import socks和import socket在urllib2下面的示例中,在与- 结合使用之前,请先配置并绑定套接字:
import urllib2
import socket
import socks
socks.set_default_proxy(socks.SOCKS5, "myprivateproxy.net",port=9050)
socket.socket = socks.socksocket
res=urllib2.urlopen(url).read()
Run Code Online (Sandbox Code Playgroud)