httplib模块是一个专门用于http的模块,urllib和urllib2也都是基于对它进行了更上层次的封装

我记得刚开始的时候,公司用的cdn有段时间抽风,全球40多个节点总是有那么几个节点
不同步,导致玩家加载的是老的活动图片,玩家在论坛抱怨,国外的玩家抱怨,那可
不像国内的(客服MM万篇一律:您的情况我已经收到,已经在处理了请稍后)。
国外的要是不立马赶紧马上处理好,玩家会直接撤款,搞不好还告你。。
论坛一旦接到这样的情况马上就得打电话给我们,管尼码半夜几点。(运维的悲哀)
刚开始时候只能写host绑域名然后打开浏览器一个一个去测。40多个地址啊,手工去弄起码20分钟以后才能查出来是哪个节点不同步
后来就直接写脚本完成了,40多个节点测完也顶多一分把钟的事情
原理:一般CDN都是按照地区智能DNS解析的。每个地区ping出来的地址都不一样。按照本地连接链接域名的方式是没法遍历那些节点的,你只能获得离你最近的那个节点(要么就像我写host那样弄)。
后来想到一个办法HTTP是基于TCP/IP的,凡是基于TCP/IP的都是可以用IP地址通信的,而web服务器,都是识别主机名的(就是域名),于是就写了类似下面这个脚本的用来测试。。
源脚本在以前公司的服务器上,这个我是用58的cdn测的(他们用的网宿的)

 1 coding:utf-8
 2 import httplib
 3 import hashlib
 4 uri="/js/v7/hp/19h_79463675356567.js" #url路径
 5 #CDN节点的IP列表,第一个是本地虚拟机,web目录下没文件的
 6 cdnnode=["192.168.1.90","58.221.56.5","117.21.189.108","182.140.147.57","113.107.56.96","58.51.95.157","113.107.236.12","198.47.104.131","209.170.78.73"]
 7 Host="pic2.58.com" #CDN用的域名
 8 for i in cdnnode:
 9     conn=httplib.HTTPConnection(i)  #先链接上IP
10     conn.request(method="GET",    #以GET的方式发送请求
11                  url=uri,            #请求的web路径
12                  headers={'Host':Host,  #请求头里面的主机名,
13                                  "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, lik    e Gecko) Chrome/33.0.1750.152 Safari/537.36",#这个是我模拟的浏览器信息
14                  "Referer":"im is test"})#请求来源(那些防盗链的基本上就是检查这个字段),本来就测试用的
15     response=conn.getresponse()  #获取CDN的回应内容信息
16     print i,response.status      #打印IP和http状态码
17     print response.getheaders()  #打印回应头信息,以列表嵌元组的方式表示
18     print hashlib.md5(response.read()).hexdigest() #读取回应的内容信息,然后再计算出他的MD5值
19     print
20     conn.close()  #链接关闭

执行结果

 1 root@zing:~/Desktop# python h.py
 2 192.168.1.90 404  #本地虚拟主机里面没有那个文件,所以饭或404页面
 3 [('date', 'Thu, 03 Apr 2014 02:12:42 GMT'), ('content-length', '571'), ('content-type', 'text/html'), ('connection', 'keep-alive'), ('server', 'nginx/1.0.15')]
 4 d0ad532febcf12aa3559ce2a3f8324b8   #这是404页面的MD5值
 5
 6 #下面的是cdn的测试数据,从x-via的最后一部分可以看出他们使用的是不同的节点
 7 58.221.56.5 200
 8 [('content-length', '14803'), ('accept-ranges', 'bytes'), ('x-via', '1.1 jszjsx20:88 (Cdn Cache Server V2.0), 1.1 zjjhdx36:8104 (Cdn Cache Server V2.0), 1.1 nt42:0 (Cdn Cache Server V2.0)'), ('server', 'nginx/1.4.2'), ('last-modified', 'Mon, 03 Mar 2014 07:28:52 GMT'), ('connection', 'keep-alive'), ('etag', '"53142f34-39d3"'), ('date', 'Wed, 02 Apr 2014 14:14:43 GMT'), ('content-type', 'application/x-javascript')]
 9 10f96bdb2285851ee5b553dcd3bdd5e1
10
11 117.21.189.108 200
12 [('content-length', '14803'), ('accept-ranges', 'bytes'), ('x-via', '1.1 jszjsx20:88 (Cdn Cache Server V2.0), 1.1 zjjhdx36:8104 (Cdn Cache Server V2.0), 1.1 jxjj111:10 (Cdn Cache Server V2.0)'), ('server', 'nginx/1.4.2'), ('last-modified', 'Mon, 03 Mar 2014 07:28:52 GMT'), ('connection', 'keep-alive'), ('etag', '"53142f34-39d3"'), ('date', 'Wed, 02 Apr 2014 14:14:43 GMT'), ('content-type', 'application/x-javascript')]
13 10f96bdb2285851ee5b553dcd3bdd5e1
14
15 182.140.147.57 200
16 [('content-length', '14803'), ('accept-ranges', 'bytes'), ('x-via', '1.1 jszjsx20:88 (Cdn Cache Server V2.0), 1.1 zjjhdx36:8104 (Cdn Cache Server V2.0), 1.1 cdxx61:6 (Cdn Cache Server V2.0)'), ('server', 'nginx/1.4.2'), ('last-modified', 'Mon, 03 Mar 2014 07:28:52 GMT'), ('connection', 'keep-alive'), ('etag', '"53142f34-39d3"'), ('date', 'Wed, 02 Apr 2014 14:14:43 GMT'), ('content-type', 'application/x-javascript')]
17 10f96bdb2285851ee5b553dcd3bdd5e1
18
19 113.107.56.96 200
20 [('content-length', '14803'), ('accept-ranges', 'bytes'), ('x-via', '1.1 jszjsx20:88 (Cdn Cache Server V2.0), 1.1 zjjhdx36:8104 (Cdn Cache Server V2.0), 1.1 jydx39:0 (Cdn Cache Server V2.0)'), ('server', 'nginx/1.4.2'), ('last-modified', 'Mon, 03 Mar 2014 07:28:52 GMT'), ('connection', 'keep-alive'), ('etag', '"53142f34-39d3"'), ('date', 'Wed, 02 Apr 2014 14:14:43 GMT'), ('content-type', 'application/x-javascript')]
21 10f96bdb2285851ee5b553dcd3bdd5e1
22
23 58.51.95.157 200
24 [('content-length', '14803'), ('accept-ranges', 'bytes'), ('x-via', '1.1 jszjsx20:88 (Cdn Cache Server V2.0), 1.1 zjjhdx36:8104 (Cdn Cache Server V2.0), 1.1 hbxf145:2 (Cdn Cache Server V2.0)'), ('server', 'nginx/1.4.2'), ('last-modified', 'Mon, 03 Mar 2014 07:28:52 GMT'), ('connection', 'keep-alive'), ('etag', '"53142f34-39d3"'), ('date', 'Wed, 02 Apr 2014 14:14:44 GMT'), ('content-type', 'application/x-javascript')]
25 10f96bdb2285851ee5b553dcd3bdd5e1
26
27 113.107.236.12 200
28 [('content-length', '14803'), ('accept-ranges', 'bytes'), ('x-via', '1.1 jszjsx20:88 (Cdn Cache Server V2.0), 1.1 zjjhdx36:8104 (Cdn Cache Server V2.0), 1.1 gdyf15:1 (Cdn Cache Server V2.0)'), ('server', 'nginx/1.4.2'), ('last-modified', 'Mon, 03 Mar 2014 07:28:52 GMT'), ('connection', 'keep-alive'), ('etag', '"53142f34-39d3"'), ('date', 'Wed, 02 Apr 2014 14:14:44 GMT'), ('content-type', 'application/x-javascript')]
29 10f96bdb2285851ee5b553dcd3bdd5e1
30
31 198.47.104.131 200
32 [('content-length', '14803'), ('accept-ranges', 'bytes'), ('x-via', '1.1 jszjsx22:8104 (Cdn Cache Server V2.0), 1.1 hdwt37:8107 (Cdn Cache Server V2.0), 1.1 mgdls130:3 (Cdn Cache Server V2.0)'), ('server', 'nginx/1.4.2'), ('last-modified', 'Mon, 03 Mar 2014 07:28:52 GMT'), ('connection', 'keep-alive'), ('etag', '"53142f34-39d3"'), ('date', 'Wed, 02 Apr 2014 14:14:45 GMT'), ('content-type', 'application/x-javascript')]
33 10f96bdb2285851ee5b553dcd3bdd5e1
34
35 209.170.78.73 200
36 [('content-length', '14803'), ('accept-ranges', 'bytes'), ('x-via', '1.1 jszjsx22:8104 (Cdn Cache Server V2.0), 1.1 hdwt37:8107 (Cdn Cache Server V2.0), 1.1 fra72:1 (Cdn Cache Server V2.0)'), ('server', 'nginx/1.4.2'), ('last-modified', 'Mon, 03 Mar 2014 07:28:52 GMT'), ('connection', 'keep-alive'), ('etag', '"53142f34-39d3"'), ('date', 'Wed, 02 Apr 2014 14:14:33 GMT'), ('content-type', 'application/x-javascript'), ('age', '1')]
37 10f96bdb2285851ee5b553dcd3bdd5e1

一些常用的方法函数
request(method,url,body,head):
method:请求的方式,一般是post和get
url:请求的资源路径
body:需要提交到服务器上的数据,一般需要用urllib.urlencode(date) 编码一次才行,如果提交的是json数据的话需要调用json模块
header:请求头
response.read():读取响应消息内容
response.getheader('name'):name为指定的头
response.getheaders():以为列表嵌元组的方式获取响应header

转载于:https://www.cnblogs.com/z-ping/p/3840666.html

httplib模块,测试cdn节点文件同步相关推荐

  1. 模拟get和post请求(支持自定义header和测试CDN节点)

    下面是一个模拟get或者post请求的方法支持 1.get,post方法 2.自定义参数 3.自定义header 4.返回服务器的返回内容和header 5.支持相特定的服务器请求url,适合测试cd ...

  2. 脚本检测CDN节点资源是否与源站资源一致

    需求: 1.所有要检测的资源url放到一个单独文件中 2.检测cdn节点资源大小与源站文件大小是否一致 3.随机抽查几个资源,检查md5sum是否一致 4.使用多线程,可配置线程数 代码目录: hex ...

  3. 微软测试新工具:让Windows 10和Android设备文件同步更方便

    为让Windows 10系统更好的兼容竞争平台,微软近期正为Android手机测试全新的工具,该工具能够非常方便的在Windows 10 PC和Android设备之间进行文件同步.在微软车库应用Arr ...

  4. 实现linux多台服务器间目录文件同步

    由于平台要上负载均衡,后面有4个emc节点,每次更新系统都比较麻烦,所以这里记录一下收集到的一个看着靠谱的同步方案 出处:Linux中文件实时同步 - 刘新元 - 博客园 注意:看着靠谱,暂时没有实验 ...

  5. cdn节点人少延迟高_让你刷剧一直爽,CDN原理是什么

    鼠年春节,一个特别的春节.受疫情影响,假期比往年长了一些.这么长时间宅在家中,想必大家除了睡觉,花费时间最多的就是"刷剧"了.今天讲的技术主题就和"刷剧"有关, ...

  6. centos 多台 文件夹同步_CentOS7配置rsync实现文件同步

    rsync(remote synchronize )是一个远程文件同步工具,支持多个操作系统,用于在多台服务器之间同步目录和文件.rsync采用增量传输文件的方法,只传输新文件和修改过的文件,而不是每 ...

  7. rsync文件同步、Inotify-tools参数详解

    inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树: inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事 ...

  8. 如何同步FTP服务器文件,ftp服务器文件同步

    ftp服务器文件同步 内容精选 换一换 安装完Mind Studio并进入相关工程页面后,如果用户使用算子工程或应用工程开发了相关程序,需要进行工程的编译和运行,用于生成相关二进制文件,进行工程编译前 ...

  9. Sersync实现触发式文件同步

    序 言:如果我们后端有多台网站服务器或者文件服务器,而且没有好的文件同步机制,那么当我们升级程序或者更新文件的时候,就需要每台服务器或者目录都要更 新,这样很容易出问题,并很容易导致两边的文件不一致, ...

最新文章

  1. 【汇总】一大波CVPR2020开源项目重磅来袭!
  2. jquery中offset和position的区别
  3. 干货:五分钟带你看懂NestedScrolling嵌套滑动机制
  4. java 多线程(Callable,Future)
  5. IOS开发基础知识--碎片8
  6. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
  7. 将 ASP.NET Core 2.1 升级到最新的长期支持版本ASP.NET Core 3.1
  8. 将一个5X5的矩阵中最大的元素放在中心, 4个角分别放4个最小的元素(顺序为从左到右,从上到下,从小到大存放)其余数字从小到大
  9. Python Cookbook 3rd Edition Documentation
  10. html 超链接嵌套,嵌套的超链接区域,HTML源中没有嵌套的链接元素
  11. transforms中RandomResizedCrop、Resize、CenterCrop的理解
  12. ATT CK 阶段之 Initial Access --Drive-by Compromise
  13. 计算机编程教育现状,中小学生编程教育现状调查研究
  14. 微信推送封面尺寸_微信公众平台图片尺寸是多少 如何设置
  15. jme示例代码中的素材在哪
  16. STM32 keyboard USB键盘功能的实现
  17. 安装mysql数据库和mysql客户端
  18. 使用 hugegraph-studio 插入电影数据并查询
  19. 每周一磁 · 矫顽力Hcb和内禀矫顽力Hcj
  20. 服务器win10虚拟内存设置方法,win10虚拟内存怎么设置最好_win10虚拟内存设置多少好-win7之家...

热门文章

  1. php7.2.2 配置数据库连接,Tp5连接sql server数据库(更新:PHP7.2加载不懂sqlsrv扩展)...
  2. 平时上机练习的注意点(NOIP2019)
  3. MySQL GUI图形化界面常用软件推荐
  4. 排列组合 “n个球放入m个盒子“里,再来一遍
  5. 【CCCC】L2-017 人以群分 (25分),,模拟水题
  6. setmaximumsize java_setMaximumSize为什么不起作用
  7. 计算机硬件知识大赛,计算机知识技能大赛.doc
  8. 什么叫pmt测试分析_圆偏振发光光谱仪——南方科技大学分析测试中心设备介绍第51期...
  9. mysql tode_FAQ: MyDB Studio for MySQL
  10. 第三章EF的基本使用 综合案例(练习)