使用Python 'Requests'模块的代理

268 投票
12 回答
643051 浏览
提问于 2025-04-17 07:10

这是关于Python中非常棒的Requests模块的一个简单问题。

我在文档里找不到变量'proxies'应该包含什么内容。当我给它一个包含标准“IP:PORT”值的字典时,它拒绝了,提示需要两个值。所以,我猜(因为文档里似乎没有说明)第一个值是IP,第二个是端口,对吗?

文档里只提到这一点:

proxies – (可选)一个字典,将协议映射到代理的URL。

所以我试了这个……我该怎么做呢?

proxy = { ip: port}

我是否应该在放入字典之前将这些转换成某种类型?

r = requests.get(url,headers=headers,proxies=proxy)

12 个回答

42

我发现urllib这个库有一些很不错的代码,可以直接获取系统的代理设置,而且格式也正好可以直接使用。你可以这样用:

import urllib

...
r = requests.get('http://example.org', proxies=urllib.request.getproxies())

这个方法效果很好,urllib也能获取Mac OS X和Windows的设置。

56

你可以在这里查看代理的相关文档

如果你需要使用代理,可以在任何请求方法中通过proxies参数来设置每个请求:

import requests

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "https://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

如果你想在使用代理的时候进行HTTP基本认证,可以使用这种格式:http://用户名:密码@代理地址.com/

proxies = {
    "http": "http://user:pass@10.10.1.10:3128/"
}
445

proxies字典的写法是 {"协议": "方案://ip:端口", ...}。通过这个,你可以为使用 httphttpsftp 协议的请求指定不同的(或者相同的)代理:

http_proxy  = "http://10.10.1.10:3128"
https_proxy = "https://10.10.1.11:1080"
ftp_proxy   = "ftp://10.10.1.10:3128"

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

r = requests.get(url, headers=headers, proxies=proxies)

这个信息是从 requests 文档中得来的:

参数:
method – 新请求对象的方法。
url – 新请求对象的URL。
...
proxies – (可选)字典,用于将 协议 映射到 代理的URL
...


在Linux系统中,你也可以通过设置 HTTP_PROXYHTTPS_PROXYFTP_PROXY 环境变量来实现:

export HTTP_PROXY=10.10.1.10:3128
export HTTPS_PROXY=10.10.1.11:1080
export FTP_PROXY=10.10.1.10:3128

在Windows系统中:

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

撰写回答