我想通过http代理服务器传递所有Python的流量,我检查了urlib2并请求包,例如,它们可以配置为使用代理但是我怎样才能使用像Python的系统范围代理代理所有数据?
答案 0 :(得分:21)
Linux系统首先导出像这样的环境变量
Bundle bundle = new Bundle();
bundle.putString("fields", "events");
new GraphRequest(AccessToken.getCurrentAccessToken(), "me/likes", bundle, HttpMethod.GET, new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
// Your stuff here
}
}).executeAsync();
或者您希望通过代理传递的脚本
$ export http_proxy="http://<user>:<pass>@<proxy>:<port>"
$ export HTTP_PROXY="http://<user>:<pass>@<proxy>:<port>"
$ export https_proxy="http://<user>:<pass>@<proxy>:<port>"
$ export HTTPS_PROXY="http://<user>:<pass>@<proxy>:<port>"
然后运行python脚本
import os
proxy = 'http://<user>:<pass>@<proxy>:<port>'
os.environ['http_proxy'] = proxy
os.environ['HTTP_PROXY'] = proxy
os.environ['https_proxy'] = proxy
os.environ['HTTPS_PROXY'] = proxy
#your code goes here.............
<强>更新强>
您还可以使用redsocks这个工具,您可以静默地将所有TCP连接重定向到带或不带身份验证的PROXY。但是你必须小心,因为它不仅适用于python的所有连接。
Windows系统您可以使用freecap,proxifier,proxycap等工具,并配置在python可执行文件后面运行
答案 1 :(得分:4)
不可否认,这并不是您正在寻找的内容,但如果您知道python代码中所有网络流量的程序化来源,则可以在代码本身中执行此代理包装。使用以下链接中的PySocks
模块建议使用纯python解决方案:
https://github.com/httplib2/httplib2/issues/22
import httplib2
# detect presense of proxy and use env varibles if they exist
pi = httplib2.proxy_info_from_environment()
if pi:
import socks
socks.setdefaultproxy(pi.proxy_type, pi.proxy_host, pi.proxy_port)
socks.wrapmodule(httplib2)
# now all calls through httplib2 should use the proxy settings
httplib2.Http()
现在,使用httplib2
进行的每次通话都将使用这些代理设置。您应该能够包装使用套接字的任何网络模块来使用此代理。
https://github.com/Anorov/PySocks
他们在那里提到这不是推荐的,但它似乎对我来说很好。