在python中,模拟http客户端发送get和post请求,主要用httplib模块的功能。
1、python发送GET请求
我在本地建立一个测试环境,python.php的内容就是输出一句话:
1 |
<?php |
2 |
echo 'python httplib study!' .PHP_EOL; |
3 |
var_dump( $_POST ); |
4 |
?> |
python发送get请求代码:
01 |
#!/usr/bin/env python |
02 |
# -*- coding: gbk -*- |
03 |
# -*- coding: utf-8 -*- |
04 |
# Date: 2014/8/19 |
05 |
# Created by 独自等待 |
06 |
# 博客 http://www.waitalone.cn/ |
07 |
import httplib |
08 |
09 |
httpClient = None |
10 |
11 |
try : |
12 |
httpClient = httplib.HTTPConnection( 'localhost' , 80 , timeout = 10 ) |
13 |
httpClient.request( 'GET' , '/python.php' ) |
14 |
15 |
# response是HTTPResponse对象 |
16 |
response = httpClient.getresponse() |
17 |
print response.status |
18 |
print response.reason |
19 |
print response.read() |
20 |
except Exception, e: |
21 |
print e |
22 |
finally : |
23 |
if httpClient: |
24 |
httpClient.close() |
上面代码中使用了finally来保证即使出错的时候也能关闭httpClient。运行这个程序,在我的电脑上输出结果如下:
2、python发送POST请求
修改python.php内容,打印出$_POST数组:
1 |
<?php |
2 |
echo 'python httplib study!' .PHP_EOL; |
3 |
var_dump( $_POST ); |
4 |
?> |
python发起post请求代码:
01 |
#!/usr/bin/env python |
02 |
# -*- coding: gbk -*- |
03 |
# -*- coding: utf-8 -*- |
04 |
# Date: 2014/8/19 |
05 |
# Created by 独自等待 |
06 |
# 博客 http://www.waitalone.cn/ |
07 |
import urllib, httplib |
08 |
09 |
httpClient = None |
10 |
try : |
11 |
params = urllib.urlencode({ 'name' : 'waitalone.cn' , 'age' : '5' }) |
12 |
headers = { 'Content-type' : 'application/x-www-form-urlencoded' , 'Accept' : 'text/plain' } |
13 |
httpClient = httplib.HTTPConnection( 'localhost' , 80 , timeout = 10 ) |
14 |
httpClient.request( 'POST' , '/python.php' , params, headers) |
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() |