httplib模块,测试cdn节点文件同步

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 [email protected]:~/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

httplib模块,测试cdn节点文件同步

时间: 2024-08-05 06:35:07

httplib模块,测试cdn节点文件同步的相关文章

Python脚本测试cdn节点状态

情景: 公司某晚上cdn服务商的节点突然崩溃导致某些网页无法打开或打开缓慢,之前测试cdn节点状态基本采用更改host文件的逐个访问的方式,费时费力,便想通过脚本来完成这项cdn节点状态测试.主要采用了xlrd(读表格数据).httplib(绑定cdn节点进行访问及状态获取).xlsxwriter(写测试结果).脚本从制定格式的表格(data.xlsx)中读取数据并输出到另一张表格(result.xlsx) 脚本写的比较随意,各种不规范,后续会进行跟进,附代码: 1 # -*- coding:

MySQL的3节点主从同步复制方案测试

上接<MySQL的3节点主从同步复制方案> 六.测试主从同步复制 现在我们来测试下,mysql的主从同步. 1.在主库插入测试数据 先在主库MasterA 上给m_s_rep数据库插入和删除2条数据.如下: mysql> insert into test(id,content) values(3,'data3'); mysql> insert into test(id,content) values(2,'data2'); mysql> select * from test;

强大的本地代码文件同步软件FreeFileSync使用说明+测试【图文】

文件同步的工具,我是用来同步Java的代码的 作者:逸'Coding'Blog 到百度软件中心下载比较安全,360会报一个广告插件病毒 阻止就好.然后默认安装.安装路径可以该车改成D盘 FreeFileSync测试过的运行没有问题的系统:xp.win7,此外,还有linux版本.本机为win7 64 FreeFileSync不需要版本服务器,可以直接文件夹两两同步,所以基本上安好程序后,不用任何多余的配置. 不需要在服务器上控制版本.就本地文件夹对比同步 我是用来同步我的Java代码,所以都使用

利用python httplib模块 发送Post请求测试web服务是否正常起来!

最近在学习python,恰好老大最近让我搞个基于post请求测试web服务是否正常启用的小监控,上网查了下资料,发现强大的Python恰好能够用上,所以自己现学现卖,顺便锻炼下自己. 由于本人也刚接触这块不久属于菜鸟级别,所以在任务之前,只能上网把基于post请求的web监控了解清楚,这些资料网上很多,因为本人认为完成这类任务最重要的就是要将实现的原理研究清楚,写程序只是实现的工具,如果大的逻辑不正确,后面的都是白忙活. 了解post发送请求的原理后,利用Python的httplib模块进行逻辑

saltstack 自动化运维神器(二)文件同步

文件同步: 其实在做openstack的运维对一些文件的同步其实是很繁琐.有一个配置项或者一行代码的源码文件进行同步.那么现在我们就开始介绍saltstack的文件同步功能 环境说明:操作系统版本:rhel6.5x64 1.master配置同步根目录 在开始saltstack的配置管理之前,要首先指定saltstack所有状态文件的根目录,在master上做如下操作 ## 首先修改master的配置文件,指定根目录,注意缩进全部使用两个空格来代替Tab(python规范)## 确定指定的目录是否

[sersync+rsync] centos6.5 远程文件同步部署记录

针对本地文件的修改,自动同步到远程文件夹,远程备份很方面.研究了下大家的主流同步方案一般是 rsync+inotify和rsync+sersync, 我这里使用sersync的方案,当然大部分都是参照前人经验,感谢他们的无私. 概述 我这里的目的是为了远程同步mysql的备份文件,centos6.5 同步到另一台centos主机 使用rsync+sersync做实时同步时,用于推送文件 的服务器运行sersync服务,用于接收文件的服务器则运行rsync守护进程,简单来说就是sersync会利用

用rsync进行文件同步

实施目的: 实现将文件从10.0.0.40/wb/的文件同步到10.0.0.194/wb/下 实施流程: 1.在两台机器上安装rsync yum install rsync 2.配置服务端(被同步服务器),10.0.0.194 vi /etc/rsyncd.conf 添加以下内容: uid = tomcat #设置执行rsync的本地用户 gid = tomcat  #设置执行rsync的本地组 use chroot = yes #是否chroot max connections = 4  #最

Rsync 文件同步(windows下安装部署)

更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn) Rsync windows版本安装包:(这里下载的是4.0.5)下载地址:http://www.pc6.com/softview/SoftView_108644.htmlRsync 软件包括 server 端 和 client 端rsync 软件的安装:默认端口:873因为是windows版的图形化安装,这里就不演示. 只要记住服务端装server版.客户端装 client 版Server 端的配置如下:    

rsync+inotify实现文件同步

什么是rsync,remote synchronize远程同步简写.Linux系统上由rsync这个软件包提供.rsync有几个特点,镜像保存整个文件目录树或文件系统:有较高的数据传输效率:可以借助ssh实现安全数据传输:支持匿名传输等.rsync同步只是针对变化的文件进行传输,意味着其会在源和目标之间比较文件的异同.相对与scp来说,第一次传输两边都效率都差不多.但以后传输相同目录下的文件时,rsync只传输变化的文件,而非像scp直接覆盖.inotify是linux的一种文件变化通知机制,用