在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 python |
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 python |
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() |
运行代码,在我的电脑上输出如下: