Python3中的代理检测

时间:2017-11-14 08:09:42

标签: python proxy

当我在家里使用脚本时,下面的脚本工作正常(同一台PC!):

import urllib.request

x = urllib.request.urlopen('https://www.google.com/')
print(x.read())

当我在工作中连接时,使用相同的脚本不起作用。我不知道代理地址或IP,所以我的脚本应该使用与IE或其他任何东西相同的方式。

我发现了一些关于使用代理的建议,但我不知道代理IP或细节。当我将脚本移动到另一台PC时,它可能有不同的代理,所以我认为硬编码不是好方法。 我能告诉Python自动检测代理设置吗?

1 个答案:

答案 0 :(得分:0)

  1. 按照您的示例,我假设您正在通过代理进行https调用。 urllib文档提示its not supported。因此,您可能需要与http安定下来。

  2. 为了验证您的设置没有任何问题,您可以尝试直接打开IP:

  3. 
        import urllib
        # IP address for `http://www.google.com` is `216.58.205.196`
        x = urllib.urlopen('http://216.58.205.196')
        print x.read()
    
    
    1. 一个。有很多关于Python在各种其他线程中使用trippy自动检测代理设置的抱怨。我只在一年前遇到过这个问题而且我选择设置固定代理而不是尝试配置auto-detect。要了解您的代理,您可以转到chrome网址chrome://net-internals/#proxy或运行netstat -an | grep EST命令。

      B中。获得代理地址后,您可以使用以下代码:

    2. 
          import urllib
          # IP address for `http://www.google.com` is `216.58.205.196`
          x = urllib.urlopen('http://216.58.205.196', 
                              proxies={'http': 'http://www.someproxy.com:3128'})
          print x.read()
      
      
      1. 如果您无法避免https,那么您可以考虑使用requests库。我没有对此进行测试,但requests documentation看起来很有希望。这就是它可以做到的!
      2. 
            import requests
            proxies = {
              'http': 'http://10.10.1.10:3128',
              'https': 'http://10.10.1.10:1080',
            }
            requests.get('https://example.org', proxies=proxies)
        


        编辑:

        1:您可能需要设置proxy authentication才能使3.B.正常工作

        2:对于特殊字符,您需要使用unicode:'p@ssw0rd'.decode('utf-8')

        希望这有帮助!