python通过get,post方式发送http请求和接收http响应的方法


Posted in Python onMay 26, 2015

本文实例讲述了python通过get,post方式发送http请求和接收http响应的方法。分享给大家供大家参考。具体如下:

测试用CGI,名字为test.py,放在apache的cgi-bin目录下:

#!/usr/bin/python
import cgi
def main(): 
  print "Content-type: text/html\n"
  form = cgi.FieldStorage()
  if form.has_key("ServiceCode") and form["ServiceCode"].value != "":
    print "<h1> Hello",form["ServiceCode"].value,"</h1>" 
  else:  
    print "<h1> Error! Please enter first name.</h1>" 
main()

python发送post和get请求

get请求:

使用get方式时,请求数据直接放在url中。

方法一、

import urllib
import urllib2
url = "http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa"
req = urllib2.Request(url)
print req
res_data = urllib2.urlopen(req)
res = res_data.read()
print res

方法二、

import httplib
url = "http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa"
conn = httplib.HTTPConnection("192.168.81.16")
conn.request(method="GET",url=url) 
response = conn.getresponse()
res= response.read()
print res

post请求:

使用post方式时,数据放在data或者body中,不能放在url中,放在url中将被忽略。

方法一、

import urllib
import urllib2
test_data = {'ServiceCode':'aaaa','b':'bbbbb'}
test_data_urlencode = urllib.urlencode(test_data)
requrl = "http://192.168.81.16/cgi-bin/python_test/test.py"
req = urllib2.Request(url = requrl,data =test_data_urlencode)
print req
res_data = urllib2.urlopen(req)
res = res_data.read()
print res

方法二、

import urllib
import httplib 
test_data = {'ServiceCode':'aaaa','b':'bbbbb'}
test_data_urlencode = urllib.urlencode(test_data)
requrl = "http://192.168.81.16/cgi-bin/python_test/test.py"
headerdata = {"Host":"192.168.81.16"}
conn = httplib.HTTPConnection("192.168.81.16")
conn.request(method="POST",url=requrl,body=test_data_urlencode,headers = headerdata) 
response = conn.getresponse()
res= response.read()
print res

对python中json的使用不清楚,所以临时使用了urllib.urlencode(test_data)方法;

模块urllib,urllib2,httplib的区别

httplib实现了http和https的客户端协议,但是在python中,模块urllib和urllib2对httplib进行了更上层的封装。

介绍下例子中用到的函数:

1、HTTPConnection函数

httplib.HTTPConnection(host[,port[,stict[,timeout]]])
这个是构造函数,表示一次与服务器之间的交互,即请求/响应
host 标识服务器主机(服务器IP或域名)
port 默认值是80
strict 模式是False,表示无法解析服务器返回的状态行时,是否抛出BadStatusLine异常

例如:

conn = httplib.HTTPConnection("192.168.81.16",80) 与服务器建立链接。

2、HTTPConnection.request(method,url[,body[,header]])函数

这个是向服务器发送请求

method 请求的方式,一般是post或者get,

例如:

method="POST"或method="Get"
url 请求的资源,请求的资源(页面或者CGI,我们这里是CGI)

例如:

url="http://192.168.81.16/cgi-bin/python_test/test.py" 请求CGI

或者

url="http://192.168.81.16/python_test/test.html" 请求页面
body 需要提交到服务器的数据,可以用json,也可以用上面的格式,json需要调用json模块
headers 请求的http头headerdata = {"Host":"192.168.81.16"}

例如:

test_data = {'ServiceCode':'aaaa','b':'bbbbb'}
test_data_urlencode = urllib.urlencode(test_data)
requrl = "http://192.168.81.16/cgi-bin/python_test/test.py"
headerdata = {"Host":"192.168.81.16"}
conn = httplib.HTTPConnection("192.168.81.16",80)
conn.request(method="POST",url=requrl,body=test_data_urlencode,headers = headerdata)

conn在使用完毕后,应该关闭,conn.close()

3、HTTPConnection.getresponse()函数

这个是获取http响应,返回的对象是HTTPResponse的实例。

4、HTTPResponse介绍:

HTTPResponse的属性如下:
read([amt]) 获取响应消息体,amt表示从响应流中读取指定字节的数据,没有指定时,将全部数据读出;
getheader(name[,default]) 获得响应的header,name是表示头域名,在没有头域名的时候,default用来指定返回值
getheaders() 以列表的形式获得header

例如:

date=response.getheader('date');
print date
resheader=''
resheader=response.getheaders();
print resheader

列形式的响应头部信息:

[('content-length', '295'), ('accept-ranges', 'bytes'), ('server', 'Apache'), ('last-modified', 'Sat, 31 Mar 2012 10:07:02 GMT'), ('connection', 'close'), ('etag', '"e8744-127-4bc871e4fdd80"'), ('date', 'Mon, 03 Sep 2012 10:01:47 GMT'), ('content-type', 'text/html')] 
date=response.getheader('date');
print date

取出响应头部的date的值。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python函数中定义参数的四种方式
Nov 30 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
Python手机号码归属地查询代码
May 04 Python
Python实现聊天机器人的示例代码
Jul 09 Python
python爬虫之urllib3的使用示例
Jul 09 Python
python如何求解两数的最大公约数
Sep 27 Python
python实现键盘控制鼠标移动
Nov 27 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
python SocketServer源码深入解读
Sep 17 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
python语言是免费还是收费的?
Jun 15 Python
python使用urllib2提交http post请求的方法
May 26 #Python
Python同时向控制台和文件输出日志logging的方法
May 26 #Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 #Python
python使用正则表达式提取网页URL的方法
May 26 #Python
python获取指定路径下所有指定后缀文件的方法
May 26 #Python
python通过apply使用元祖和列表调用函数实例
May 26 #Python
python获取一组数据里最大值max函数用法实例
May 26 #Python
You might like
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
php测试kafka项目示例
2020/02/06 PHP
类似CSDN图片切换效果脚本
2009/09/17 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
关于成绩下滑的自我检讨书
2014/09/20 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
小学主题班会教案
2015/08/17 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js