V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
littlecowherd
V2EX  ›  问与答

http 代理和 https 代理的区别

  •  
  •   littlecowherd · 2019-08-21 11:15:33 +08:00 · 3096 次点击
    这是一个创建于 1709 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ** 验证函数 **

    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 = BeautifulSoup( 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 请求使用了代理

      通过抓包发现,协议不对应的情况下,根本不会发起对代理服务器的请求。这是为什么呢?

    4 条回复    2019-08-21 18:09:48 +08:00
    ysc3839
        1
    ysc3839  
       2019-08-21 11:58:00 +08:00
    你这不是“ http 代理和 https 代理”,而是“访问 http/https 网站时使用的代理”。
    http/https 代理指的是客户端连接代理服务器的协议。
    littlecowherd
        2
    littlecowherd  
    OP
       2019-08-21 17:48:00 +08:00
    emmm,我现在的理解是:
    proxies 字典里的 key 的表示协议类型( http/https )应该使用哪个代理服务器(对应的 value ),当找不到对应的协议的时候就默认不使用。
    http/https 代理指的是 key 对应的值(即代理地址)的协议,如
    proxies = {
    'https': 'https://222.189.244.56:48304'
    }
    中的 https://222.189.244.56:48304。( https 代理)

    不知道我的理解对不对?
    littlecowherd
        3
    littlecowherd  
    OP
       2019-08-21 17:49:14 +08:00
    @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 代理)

    不知道我的理解对不对?
    ysc3839
        4
    ysc3839  
       2019-08-21 18:09:48 +08:00 via Android   ❤️ 1
    @littlecowherd 是的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5470 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 09:04 · PVG 17:04 · LAX 02:04 · JFK 05:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.