1

我有一个使用 apache 的本地开发 django 设置。问题是在部署服务器上没有代理,而在我的工作场所我在 http 代理后面工作,因此请求调用失败。

有没有办法让请求库中的所有调用都通过代理进行。[我知道如何使用 proxies 参数为单个呼叫添加代理,但有全局解决方案吗?]

4

2 回答 2

4

我得到了 AmrFouad 报告的相同错误。最后,它通过更新 wsgi.py 修复如下:

os.environ['http_proxy'] = "http://proxy.xxx:8080"
os.environ['https_proxy'] = "http://proxy.xxx:8080"
于 2013-07-17T04:39:43.207 回答
3

在您的 wsgi 文件中添加以下行。

import os

http_proxy  = "10.10.1.10:3128"
https_proxy = "10.10.1.11:1080"
ftp_proxy   = "10.10.1.10:3128"

proxyDict = { 
              "http"  : http_proxy, 
              "https" : https_proxy, 
              "ftp"   : ftp_proxy
            }

os.environ["PROXIES"] = proxyDict

现在你可以在任何你想要的地方使用这个环境变量,

r = requests.get(url, headers=headers, proxies=os.environ.get("PROXIES"))

PS - 你应该看看下面的链接

  1. 环境变量的官方 Python 文档
  2. 我在哪里以及如何使用 mod-wsgi 和 django 设置环境变量?
  3. Python 环境变量

更新 1

您可以执行以下操作,以便仅在localhost.

import socket
if socket.gethostname() == "localhost":
    # do something only on local server, e.g. setting os.environ["PROXIES"]
    os.environ["PROXIES"] = proxyDict
else:
    # Set os.environ["PROXIES"] to an empty dictionary on other hosts
    os.environ["PROXIES"] = {}
于 2013-01-11T19:24:45.667 回答