使用 django:代理设置

Ani*_*hag 3 django proxy

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

有没有什么方法可以使请求库中的所有调用都通过代理进行。[我知道如何使用代理参数向各个调用添加代理,但是有全局解决方案吗?]

pan*_*843 5

在您的 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
Run Code Online (Sandbox Code Playgroud)

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

r = requests.get(url, headers=headers, proxies=os.environ.get("PROXIES"))
Run Code Online (Sandbox Code Playgroud)

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"] = {}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

os.environ['http_proxy'] = "http://proxy.xxx:8080"
os.environ['https_proxy'] = "http://proxy.xxx:8080"
Run Code Online (Sandbox Code Playgroud)