在python中,模拟http客户端发送get和post请求,主要用httplib模块的功能。
1、python发送GET请求
我在本地建立一个测试环境,test.php的内容就是输出一句话:
1 |
echo 'Old friends and old wines are best.' ;
|
python发送get请求代码:
1 |
#!/usr/bin/env |
2 |
#coding=utf8 |
3 |
4 |
import httplib
|
5 |
6 |
httpClient = None
|
7 |
8 |
try :
|
9 |
httpClient = httplib.HTTPConnection( 'localhost' , 80 , timeout = 30 )
|
10 |
httpClient.request( 'GET' , '/test.php' )
|
11 |
12 |
#response是HTTPResponse对象
|
13 |
response = httpClient.getresponse()
|
14 |
print response.status
|
15 |
print response.reason
|
16 |
print response.read()
|
17 |
except Exception, e:
|
18 |
print e
|
19 |
finally :
|
20 |
if httpClient:
|
21 |
httpClient.close()
|
上面代码中使用了finally来保证即使出错的时候也能关闭httpClient。运行这个程序,在我的电脑上输出结果如下:
2、python发送POST请求
修改test.php内容,打印出$_POST数组:
1 |
var_dump( $_POST );
|
python发起post请求代码:
1 |
#!/usr/bin/env |
2 |
#coding=utf8 |
3 |
4 |
import httplib, urllib
|
5 |
6 |
httpClient = None
|
7 |
try :
|
8 |
params = urllib.urlencode({ 'name' : 'tom' , 'age' : 22 })
|
9 |
headers = { "Content-type" : "application/x-www-form-urlencoded"
|
10 |
, "Accept" : "text/plain" }
|
11 |
12 |
httpClient = httplib.HTTPConnection( "localhost" , 80 , timeout = 30 )
|
13 |
httpClient.request( "POST" , "/test.php" , params, headers)
|
14 |
15 |
response = httpClient.getresponse()
|
16 |
print response.status
|
17 |
print response.reason
|
18 |
print response.read()
|
19 |
print response.getheaders() #获取头信息
|
20 |
except Exception, e:
|
21 |
print e
|
22 |
finally :
|
23 |
if httpClient:
|
24 |
httpClient.close()
|
运行代码,在我的电脑上输出如下: