
** 验证函数 **
import requests from bs4 import BeautifulSoup def validate(proxies): https_url = 'https://ip.cn' http_url = 'http://ip111.cn/' headers = {'User-Agent': 'curl/7.29.0'} https_r = requests.get( https_url, headers=headers, proxies=proxies, timeout=10) http_r = requests.get( http_url, headers=headers, proxies=proxies, timeout=10) soup = BeautfulSoup( http_r.content, 'html.parser') result = soup.find(class_='card-body').get_text().strip().split('''\n''')[0] print(f"当前使用代理:{proxies.values()}") print(f"访问 https 网站使用代理:{https_r.json()}") print(f"访问 http 网站使用代理:{result}") ** 测试 **
Case 1
proxies = { 'http': '222.189.244.56:48304', 'https': '222.189.244.56:48304' } validate(proxies) 输出
当前使用代理:dict_values(['222.189.244.56:48304', '222.189.244.56:48304']) 访问 https 网站使用代理:{'ip': '222.189.244.56', 'country': '江苏省扬州市', 'city': '电信'} 访问 http 网站使用代理:222.189.244.56 China / Nanjing 结果: 访问两个网站均使用了代理
Case 2
proxies = { 'http': '222.189.244.56:48304' } validate(proxies) 输出
当前使用代理:dict_values(['222.189.244.56:48304']) 访问 https 网站使用代理:{'ip': '118.24.234.46', 'country': '重庆市', 'city': '腾讯'} 访问 http 网站使用代理:222.189.244.56 China / Nanjing 结果: 只有 http 请求使用了代理
Case 3
proxies = { 'https': '222.189.244.56:48304' } validate(proxies) 输出
当前使用代理:dict_values(['222.189.244.56:48304']) 访问 https 网站使用代理:{'ip': '222.189.244.56', 'country': '江苏省扬州市', 'city': '电信'} 访问 http 网站使用代理:118.24.234.46 China / Nanning 结果: 只有 https 请求使用了代理
通过抓包发现,协议不对应的情况下,根本不会发起对代理服务器的请求。这是为什么呢?
1 ysc3839 Aug 21, 2019 你这不是“ http 代理和 https 代理”,而是“访问 http/https 网站时使用的代理”。 http/https 代理指的是客户端连接代理服务器的协议。 |
2 littlecowherd OP emmm,我现在的理解是: proxies 字典里的 key 的表示协议类型( http/https )应该使用哪个代理服务器(对应的 value ),当找不到对应的协议的时候就默认不使用。 http/https 代理指的是 key 对应的值(即代理地址)的协议,如 proxies = { 'https': 'https://222.189.244.56:48304' } 中的 https://222.189.244.56:48304。( https 代理) 不知道我的理解对不对? |
3 littlecowherd OP @ysc3839 emmm,我现在的理解是: proxies 字典里的 key 的表示协议类型( http/https )应该使用哪个代理服务器(对应的 value ),当找不到对应的协议的时候就默认不使用。 http/https 代理指的是 key 对应的值(即代理地址)的协议,如 proxies = { 'https': 'https://222.189.244.56:48304' } 中的 https://222.189.244.56:48304。( https 代理) 不知道我的理解对不对? |
4 ysc3839 Aug 21, 2019 via Android @littlecowherd 是的。 |