使用Python编写简单的HTTP测试代码

Python脚本很容易实现HTTP客户端代码,可用于对网站指定url的返回结果测试,判断网站或者其中某个页面运行是否正常。

本文测试环境:

  • Python 2.7.10
  • MacOS 10.12.1

比如以下脚本测试百度首页是否运行正常:

1
2
3
4
5
6
7
8
9
10
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import httplib

conn = httplib.HTTPSConnection("www.baidu.com")
conn.request("GET", "/")
res = conn.getresponse()
assert res.status == 200, '错误,应该返回HTTP 200'
print '如果没有报错,就说明测试成功了'

可将代码复制在文本编辑器中,比如Atom。可参见使用Atom作为python编辑器

保存为http-test.py

然后在终端输入命令运行此脚本:

1
python http-test.py

或者,可通过修改该文件的可执行权限:

1
chmod +x http-test.py

然后就可以直接运行:

1
./http-test.py

解释一下,下面代码表示建立一个到https://www.baidu.com的连接:

1
conn = httplib.HTTPSConnection("www.baidu.com")

如果不是https,而是http,比如http://news.qq.com/,需要这样连接:

1
conn = httplib.HTTPConnection("www.qq.com")

如果需要访问比如http://news.qq.com/a/20161205/030212.htm,需要这样写:

1
2
conn = httplib.HTTPConnection("news.qq.com")
conn.request("GET", "/a/20161205/030212.htm")

如果GET请求有参数,可这样加入:

1
conn.request("GET", "/a/20161205/030212.htm?keyword=china&size=10")

如果是POST请求参数,加入方式不同。

比如要加入keyword=china&size=10应类似这样:

1
2
3
4
5
6
7
8
import httplib, urllib
...
conn = httplib.HTTPConnection("news.qq.com")
conn.request("POST", "/a/20161205/030212.htm")
headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
params = urllib.urlencode({'keyword': china, 'size': 10})
res = conn.getresponse()
...

另外,可将HTTP响应结果打印到标准输出(就是终端):

1
2
3
4
res = conn.getresponse()
...
data=res.read()
print data

如果想了解脚本中代码的意义,请阅读官网:20.7. httplib — HTTP protocol client