Python2 基于urllib2 的HTTP请求类
一个利用urllib2模块编写的下载器,虽然有了requests模块,但是毕竟标准库
import urllib2,random class strong_down():
def __init__(self):
#ip_list和agent_list可以自己写到config文件中,然后读出来
self.proxy_ip_list = ['122.224.227.202:3128',
'182.254.220.21:3128',
'123.7.115.141:9797',
'183.61.236.54:3128',
'124.88.67.31:843',
'120.24.73.165:3128']
self.user_agent_list = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
]
self.proxy_ip_num = len(self.proxy_ip_list)
self.user_agent_num = len(self.user_agent_list) def proxy_down(self,url,time_out=5,num_retries=3):
proxy_ip = self.proxy_ip_list[random.randint(0,self.proxy_ip_num-1)]
user_agent = self.user_agent_list[random.randint(0,self.user_agent_num-1)]
proxy_handler = urllib2.ProxyHandler({'http':proxy_ip})
opener = urllib2.build_opener(proxy_handler)
request = urllib2.Request(url,headers={'User-Agent':user_agent})
#print request.headers
try:
response = opener.open(request,timeout=time_out)
html = response.read()
if html == None:print 'none'
return html
except urllib2.URLError, e:
if hasattr(e,"code"):
print '',e.code,e.reason
if hasattr(e,"reason"):
print '',e.reason
if num_retries>1:
return self.proxy_down(url,time_out,num_retries-1)
except Exception as e:
print 'error:',e
if num_retries>0:
print 'proxy try...'
return self.proxy_down(url,time_out,num_retries-1)
else:
print u'代理也没diao用'
return None def down(self,url,time_out=5,num_retries=3):
user_agent = self.user_agent_list[random.randint(0,self.user_agent_num-1)]
request = urllib2.Request(url,headers={'User-Agent':user_agent})
try:
response = urllib2.urlopen(request,timeout=time_out)
html = response.read()
return html
except urllib2.URLError, e:
if hasattr(e,"code"):
print '', e.code,e.reason,e.msg
if hasattr(e,"reason"):
print '', e.reason
if num_retries>0:
print 'try...'
return self.down(url,time_out,num_retries-1)
except Exception as e:
print 'error:',e
if num_retries>0:
print 'try...'
return self.down(url,time_out,num_retries-1) #代理
if num_retries <=0:
return self.proxy_down(url,time_out,num_retries=3)
Python2 基于urllib2 的HTTP请求类的更多相关文章
- 【PHPsocket编程专题(实战篇③)】构建基于socket的HTTP请求类
该代码是两年前写的,现在看起来有点渣了,仅仅是提供一个思路,现在做一些Api开发的时候官方会有一些SDK,这些SDK其实原理都是通过socket来通讯的,其实我个人主张用curl更方便,当然前提是你的 ...
- 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类
这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...
- 基于socket实现http请求
异步非阻塞模块原理 # 基于socket实现http请求 import socket # 多路IO复用模块 import select socket_list= [] url_list = [&quo ...
- 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载)
目录 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载) Http协议简述 HttpRequest类设计 请求部分 接收部分 关于上传和下载 Cpp实现 关于源码中的Lo ...
- 一个比较强大的HTTP请求类,支持文本参数和文件参数。
一个 http 请求类 ,支持文件上传,从淘宝 top sdk 里面扣出来的,蛮好用的,做个记录而已. 调用代码: Dictionary<string, string> textParas ...
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- .NetCore简单封装基于IHttpClientFactory的HttpClient请求
IHttpClientFactory是什么?为什么出现了IHttpClientFactory 一.IHttpClientFactory是什么? IHttpClientFactory是.netcore2 ...
- [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏
前言 这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示 ...
- python urllib2 发起http请求post
使用urllib2发起post请求 def GetCsspToken(): data = json.dumps({"userName":"wenbin", &q ...
随机推荐
- Ibatis 返回datatable数据类型案例
/// <summary> /// 查询实体 [DataSet数据集] /// </summary> /// <param name="statementNam ...
- [原]调试没有符号的 iOS 应用
说明: 这里的调试是指使用 lldb 远程调试 iOS 应用 设置断点是指在 ObjC 方法上设置断点 使用场景: 1.调试被 strip 了的 iOS 应用 2.调试被 strip 了的 iOS 系 ...
- Stream使用教程
现在,计算机CPU运行速度的快速发展已经远远超过了内存的访问速度.越来越多的程序性能被内存带宽所限制,而不是计算机的CPU运行速率. Stream benchmark是一个简单的合成基准测试程序,衡量 ...
- JavaScript function函数种类介绍
JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) { ...
- pthread_create多线程执行顺序诡异现象
多线程执行顺序诡异现象谈,你不知道的pthread_create 引文:学而时习之,不亦说乎.总是忙于具体项目,业务功能的实现:关于编程本身的技能都要有些生疏了,于是就选择了几个专题做了一次温习,重点 ...
- [wp8游戏] cocos2d-x v2.2 + VS2013 环境搭建
[wp8游戏] cocos2d-x v2.2 + VS2013 环境搭建 by:唐小崇 http://www.cnblogs.com/tangchong 从cocos2d-x v2.1.4 以来,co ...
- Matlab下多径衰落信道的仿真
衰落信道参数包括多径扩展和多普勒扩展.时不变的多径扩展相当于一个延时抽头滤波器,而多普勒扩展要注意多普勒功率谱密度,通常使用Jakes功率谱.高斯.均匀功率谱. 多径衰落信道由单径信道叠加而成,而单径 ...
- NDepend 3.0已与Visual Studio集成
NDepend 3.0已与Visual Studio集成 投递人 itwriter 发布于 2010-02-10 16:17 评论(0) 有1638人阅读 原文链接 [收藏] « » NDepe ...
- asp.net做的网站账号登陆后注销不管用了
最近做了个项目用到了数据库登录,A登陆后把登录状态保,个人信息存在Session里,但是奇怪的是,只要有一个用户登录后在其他电脑上打开上述页面,则也显示A登录状态,注销也不管用了.以前还号的.求大神啊 ...
- [每日一题] OCP1z0-047 :2013-07-16 主键与唯一索引
主键包括非空和唯一约束,它会自动创建唯一索引(注:唯一约束也会自动创建唯一索引),测试如下: 1. 创建一个表products gyj@OCM> Create table products( 2 ...