一个利用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请求类的更多相关文章

  1. 【PHPsocket编程专题(实战篇③)】构建基于socket的HTTP请求类

    该代码是两年前写的,现在看起来有点渣了,仅仅是提供一个思路,现在做一些Api开发的时候官方会有一些SDK,这些SDK其实原理都是通过socket来通讯的,其实我个人主张用curl更方便,当然前提是你的 ...

  2. 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类

    这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...

  3. 基于socket实现http请求

    异步非阻塞模块原理 # 基于socket实现http请求 import socket # 多路IO复用模块 import select socket_list= [] url_list = [&quo ...

  4. 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载)

    目录 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载) Http协议简述 HttpRequest类设计 请求部分 接收部分 关于上传和下载 Cpp实现 关于源码中的Lo ...

  5. 一个比较强大的HTTP请求类,支持文本参数和文件参数。

    一个 http 请求类 ,支持文件上传,从淘宝 top sdk 里面扣出来的,蛮好用的,做个记录而已. 调用代码: Dictionary<string, string> textParas ...

  6. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  7. .NetCore简单封装基于IHttpClientFactory的HttpClient请求

    IHttpClientFactory是什么?为什么出现了IHttpClientFactory 一.IHttpClientFactory是什么? IHttpClientFactory是.netcore2 ...

  8. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏

    前言  这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示    ...

  9. python urllib2 发起http请求post

    使用urllib2发起post请求 def GetCsspToken(): data = json.dumps({"userName":"wenbin", &q ...

随机推荐

  1. 一些小bug

    1.ie6-ie8中是不支持的,需要加上下面这句话: filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);   2.去除虚线框 a  ...

  2. CentOS 5.8安装SugarCRM 6.5版本

    环境:CentOS 5.8,安装了Asterisk 1.8 升级php到5.2SugarCRM 6.5:  Minimum PHP version required is 5.2.0. You are ...

  3. ASP.NET MVC中Area的另一种用法

    ASP.NET MVC中Area的另一种用法 [摘要]本文只是为一行代码而分享 context.MapRoute("API", "api/{controller}/{ac ...

  4. NET开发面向对象2

    面向对象 (2) 继续上一篇<ASP.NET开发,从二层至三层,至面向对象>http://www.cnblogs.com/insus/p/3822624.html .我们了解到怎样把自己的 ...

  5. Mac OS X下环境搭建 Sublime Text 2 环境变量配置 开发工具配置Golang (Go语言)

    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 一.安装Golang的SDK 在官网http://golang.org/ 直接下载安装 ...

  6. java编程思想笔记(第一章)

    Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5 ...

  7. SignalR 2.0 系列: SignalR简介

    SignalR 2.0 系列: SignalR简介 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ASP.NET S ...

  8. KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态

    KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 <寒江独钓>内核学习笔记(5)   继续我们的线程相关的数据结构的学习.接下来我们学习 KTH ...

  9. 一、SOAP简单对象访问协议讲解

    一.SOAP简单对象访问协议讲解 今天给大家讲讲SOAP的基本知识.下节给大家演示创建基于SOAP的Web Service. 更多SOA文章请查看我的个人博客. 首先,让我来简单一下入门SOAP所需的 ...

  10. const 还是 static readonly

    到底是 const 还是 static readonly   真的一样? const 和 static readonly 常在程序中用来声明常量,调用方法也没有什么不同,他们真的一样吗?我们可以做个试 ...