Python 代理IP检测 匿名性 有效性

作为一个python小白,到处踩坑是家常便饭,经常为了一个问题,花费几个小时,到处百度,谷歌找解决方案。有些问题对很多IT高手来说是小儿科的事儿,不屑去写,所以每次翻看了几十篇文章才终于找到自己想要的答案,运行成功的那一刹那,真的泪流满面啊。次数多了,也就有了想把遇到的坑写下来,留个纪念的想法。

Python一大功能就是写爬虫,使用代理IP,是绕不过的坑,代理IP除了使用有效性以外,最重要的一点就是匿名性,碰到透明代理,把你的信息全部转发出去,就一点意义都没有了。

以下这个检测方法原理是通过代理连接http://icanhazip.com/这个网站,通过网站返回的值与使用的代理IP做比较来确定是否匿名。

连接icanhazip网站,返回IP地址,如图所示:


微信图片_20190324191432.png

此处的坑是:网站返回的信息除了代理IP,还有一行空行,需要使用strip()函数去除空行

写法一
代理IP来源:自建IP代理池
数据格式:TXT格式
每次提取数量:随机提取1个
代码如下:

def confirm(self):
    url = "http://XXX.XXX.XXX.XXX:5010/get/" #自建代理IP池提取的IP,可以替换成自己的。
    r = requests.get(url).text  #获得代理IP
    print(r)
    proxy_info = r.split(':') #把IP和PORT拆分,生成列表
    print(proxy_info)
    proxy_ip = proxy_info[0] #从列表中,取第一个值作为IP
    proxy_port = proxy_info[1] #从列表中,取第二个值作为PORT
    thisProxy = "http://" + proxy_ip + ':' + str(proxy_port)
    # 使用取出的IP和PORT,重组成完整的代理
    print(thisProxy)
    requests.adapters.DEFAULT_RETRIES = 2 #设置请求数
    nnn=requests.get(url="http://icanhazip.com/",timeout=8,proxies={"http":thisProxy}).text
    #通过代理IP发出连接请求
    return_info=nnn.strip()
    #网站返回具体信息(IP),此处有坑!ICANHAZIP网站返回的信息除了IP,还会多一行空行,需要strip()函数去除空行
    print(return_info)
    if proxy_ip == return_info:
    #用代理IP(不含PORT)和返回的IP做比较,一致为有效,否则为无效
        print("代理IP:'" + thisProxy + "'有效!")
    else:
        print("代理IP无效!")

执行结果如下:


微信截图_20190324193722.png

写法二:
代理IP来源:某收费代理
数据格式:JSON格式
每次提取数量:随机提取1个
代码如下:

def confirm(self):
    url = "http://XXX.XXXXX.XXXXXX.com/proxy/api/get_ip_bs?appKey=14737f96f82b4f4b94c0876f0f922262&count=1&expiryDate=0&format=1&newLine=2"
    r = requests.get(url)
    print(r.text)
    proxy_ip = r.json()['msg'][0]['ip']
    print(proxy_ip)
    proxy_port = r.json()['msg'][0]['port']
    thisProxy = "http://" + proxy_ip + ':'+ str(proxy_port)
    print(thisProxy)
    requests.adapters.DEFAULT_RETRIES = 3
    nnn=requests.get(url="http://icanhazip.com/",timeout=8,proxies={"http":thisProxy}).text
    return_info=nnn.strip()
    print(return_info)
    if proxy_ip == return_info:
        print("代理IP:'" + thisProxy + "'有效!")
    else:
        print("代理IP无效!")

为了查看每步代码的正确性,多处使用print()打印结果,代码也未优化,只提供了思路,实际使用可以自行调整优化,希望能给大家带来帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,795评论 1 32
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,671评论 2 56
  • 网络 理论模型,分为七层物理层数据链路层传输层会话层表示层应用层 实际应用,分为四层链路层网络层传输层应用层 IP...
    FlyingLittlePG阅读 4,272评论 0 0
  • v . 当纽约时报的记者杰森·布莱尔被发现,他的报道剽窃其他记者,并且在报道中,伪造引文和详细资料时,布莱尔带着耻...
    毛旭天阅读 1,618评论 0 0
  • 今天参加了书友会的活动,这一期共读书目是木心的《哥伦比亚的倒影》。 从题目看是猜不到内容写什么的,并且一开始我以为...
    鹅鹅鹅鹅鹅鹅阅读 3,754评论 0 0