Python使用urllib和urllib2实现HTTP GET与POST请求详解
本文详细介绍如何利用Python标准库中的urllib和urllib2模块发起HTTP GET和POST请求。通过具体代码示例,演示了如何构造查询字符串进行GET请求,以及如何发送JSON数据执行POST请求,并结合轻量级Web服务器boa和CGI脚本验证了请求的有效性,适合需要处理基础HTTP交互的开发者参考。
前言
本文主要介绍Python中如何使用urllib和urllib2模块来访问HTTP协议的GET和POST请求。通过这两个模块,可以相对轻松地实现对HTTP服务的访问。接下来将详细展开具体实现方法。
示例详解
以下示例演示如何向http://127.0.0.1/cgi/test发起GET和POST请求。
此处使用常规的查询字符串(query string)格式。
POST请求中接收JSON格式数据。
其中,
在urllib2中,Request方法若仅传入一个参数,则默认为GET请求;若传入两个参数,第二个参数作为POST的数据内容,则执行HTTP POST请求。
#!/usr/bin/env python
import urllib
import urllib2
import json
url_base = "http://127.0.0.1/cgi/test"
#GET
try:
query = {'test':'yes','name':'colin'}
query_string = urllib.urlencode(query)
url = url_base+"?"+query_string
print "GET", url<br data-filtered="filtered"> print "web output:"
print urllib2.urlopen(urllib2.Request(url)).read()
except Exception as err:
print err
#post
try:
url = url_base
print "POST", url
a = {'k1':123, 'k2': '456', 'k3':'test'}
json_s = json.dumps(a)<br data-filtered="filtered"> print "POST input:"
print json_s<br data-filtered="filtered"> print "web output:"
print urllib2.urlopen(urllib2.Request(url, json_s)).read()
except Exception as err:
print err
测试服务端使用bash脚本编写,如下所示。其中jq是用于处理JSON数据的命令行工具,需单独下载;而bash、sed和awk通常为系统自带组件。
#!/bin/bash
echo -e 'Content-type:text/plain\r'
echo -e '\r'
if [ X"$REQUEST_METHOD" = X"POST" ];then
jq . | sed -nr '/:/!d; s/^([ \t]*"[^"]+"[ \t]*):/\1=/;s/,[ \t]*$//;s/"//g;p'
else
echo ${QUERY_STRING} | awk 'BEGIN{RS="&"}1'
fi
任何支持CGI的Web服务器均可使用,此处选用轻量级Web服务器boa。虽然它可能不适用于大型商业网站,但在嵌入式系统中通过CGI提供API接口非常实用,且部署过程十分简便。
搭建完成后,进行功能测试。
$ ./test.py
GET http://127.0.0.1/v1/lic/test?test=yes&name=colin
web output:
test=yes
name=colin
POST http://127.0.0.1/v1/lic/test
POST input:
{"k3": "test", "k2": "456", "k1": 123}
web output:
k3= test
k2= 456
k1= 123
总结
以上就是本文的全部内容,希望这些内容能对各位的学习或工作有所帮助。如有任何疑问,欢迎留言交流,感谢大家对本站的支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









