一、需求背景

网站刷票时,经常会遇到限制一个ip只能投票一次的限制,为此需要使用代理ip

二、脚本如下:

1、Proxy_http.py使用代理ip发送httpr的get和post请求

 #coding:utf-8
 import urllib2,urllib,time,socket,random,Proxy_ip,Useragent

 def Visitpage(proxyip,url):
     socket.setdefaulttimeout(6)
     proxy_support = urllib2.ProxyHandler({'http':proxyip})
     user_agent = random.choice(Useragent.user_agents)
     opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler)
     urllib2.install_opener(opener)
     try:
         request = urllib2.Request(url)
         request.add_header('Referer','http://www.baidu.com')
         request.add_header('User-Agent',user_agent)
         html = urllib2.urlopen(request).read()
         print html
         time.sleep(random.randint(60,180))
     except urllib2.URLError,e:
         print 'URLError! The bad proxy is %s' %proxyip
     except urllib2.HTTPError,e:
         print 'HTTPError! The bad proxy is %s' %proxyip
     except:
         print 'Unknown Errors! The bad proxy is %s ' %proxyip

 def Clicklikebutton(proxyip,url,data):
     socket.setdefaulttimeout(6)
     proxy_support = urllib2.ProxyHandler({'http':proxyip})
     user_agent = random.choice(Useragent.user_agents)
     opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler)
     try:
         request = urllib2.Request(url)
         request.add_header('Referer','http://www.baidu.com')
         request.add_header('User-Agent',user_agent)
         data = urllib.urlencode(data)
         resp = opener.open(request, data)
         print resp.read()
         time.sleep(random.randint(60,180))
     except urllib2.URLError,e:
         print 'URLError! The bad proxy is %s' %proxyip
     except urllib2.HTTPError,e:
         print 'HTTPError! The bad proxy is %s' %proxyip
     except:
         print 'Unknown Errors! The bad proxy is %s ' %proxyip

 def main():
     for i in range(len(Proxy_ip.iplist)):
         proxyip = Proxy_ip.iplist[i]
         i += 1
         print proxyip
         for m in range(random.randint(2,4)):
                      Clicklikebutton(proxyip,'你的post请求地址',{你的post请求参数})

 if __name__ == "__main__":
     main()

2、Useragent.py文件为agent库

#!/usr/bin/python
#-*- coding:utf-8 -*-

user_agents = [
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60'
    'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50'
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50'
    'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0'
    'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10'
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2'
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16'
    'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
    'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0'
    'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'
    'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36'
]

3、Proxy_ip.py为读取代理ip文件

#coding:utf-8

iplist = []
datafile = file( "E:\\monkey_test\\http\\1222-1.txt", "r" )

for line in datafile.readlines():
    line = line.strip('\n')
    iplist.append(line)

4、代理ip的获取

可在以下网站获取http://www.xicidaili.com/(可自行开发脚本爬取网站的ip,容易被封,脚本在此不提供)

也可以购买http://www.daxiangdaili.com/

python使用代理ip发送http请求的更多相关文章

  1. python检验代理ip是否可用、代理ip检验

    python检验代理ip是否可用.代理ip检验 安装相关模块: pip install requests 验证代理IP是否可用脚本: import random import telnetlib im ...

  2. C#使用代理IP发送请求

    https://www.cnblogs.com/benbenfishfish/p/5830149.html   获取可代理的IP https://www.cnblogs.com/ShalenChe/p ...

  3. [python]爬代理ip v2.0(未完待续)

    爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...

  4. Python爬虫代理IP池

    目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...

  5. python使用代理ip

    python使用代理的方法有两种 1. #先创建代理ip对象 proxy_support = urllib.request.ProxyHandler({'https':'117.64.149.137: ...

  6. python测试代理IP地址

    代码: # -*- coding: utf-8 -*- import urllib,urllib2,re from random import choice from scrapy.selector ...

  7. Python测试代理ip是否有效

    方式一: 通过icanhazip.com返回的ip地址进行检测 import requests '''代理IP地址(高匿)''' proxy = { 'http': 'http://117.85.10 ...

  8. nodejs通过代理(proxy)发送http请求(request)

    有可能有这样的需求,需要node作为web服务器通过另外一台http/https代理服务器发http或者https请求,废话不多说直接上代码大家都懂的: var http = require('htt ...

  9. python获取代理IP

    利用requests库获取代理,用Beautiful库解析网页筛选ip # -*- coding: utf- -*- import requests from bs4 import Beautiful ...

随机推荐

  1. android模拟器停在Waiting for HOME解决方案

    直接打开Android SDK Manager然后再从Android SDK Manager里的tools打开Android AVD Manager,删除掉在Eclipse里创建的模拟器.并在新建一个 ...

  2. MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql

    一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...

  3. AMD高级应用(翻译)

    Dojo now supports modules written in the Asynchronous Module Definition (AMD) format, which makes co ...

  4. maven Error resolving version for plugin 'org.apache.maven.plugins:maven-eclipse-plugin' from the repositories 解决

    报错:Error resolving version for plugin 'org.apache.maven.plugins:maven-eclipse-plugin' from the repos ...

  5. SQLServer 创建dtsx包更新统计信息(示例)

    http://blog.csdn.net/kk185800961/article/details/43816177(转载) 1 . 打开Microsoft Visual Studio 创建 integ ...

  6. msqlserver 千万级别单表数据去掉重复记录使用临时表

    由于上周末小写把数据数据重复写入数据库,没办法,得去重! 最新使用的语句: use data set nocount ondelete DoRecordProperty from( select TI ...

  7. JavaScript 命名规则

    来源 :http://www.codelifter.com/main/tips/tip_020.shtml The following are the rules for naming JavaScr ...

  8. RabbitMQ(四)

    RabbitMQ 配置 一.RabbitMQ 配置修改方式 1.修改环境变量 2.修改配置文件(只介绍这个) 3.修改运行时参数和政策 locate rabbitmq vi /var/log/rabb ...

  9. zz剖析为什么在多核多线程程序中要慎用volatile关键字?

    [摘要]编译器保证volatile自己的读写有序,但由于optimization和多线程可以和非volatile读写interleave,也就是不原子,也就是没有用.C++11 supposed会支持 ...

  10. jQuery String Functions

    In today's post, I have put together all jQuery String Functions. Well, I should say that these are ...