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多线程方式执行多个bat代码
Jun 07 Python
详解python3实现的web端json通信协议
Dec 29 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
python获取代理IP的实例分享
May 07 Python
Python实现多进程的四种方式
Feb 22 Python
Python中模块(Module)和包(Package)的区别详解
Aug 07 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
Python实战之实现康威生命游戏
Apr 26 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
推荐一篇入门级的Class文章
2007/03/19 PHP
解析yii数据库的增删查改
2013/06/20 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
推荐11个实用Python库
2015/01/23 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
分享Python字符串关键点
2015/12/13 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
使用Python来开发微信功能
2018/06/13 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
实例介绍Python中整型
2019/02/11 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
介绍一下gcc特性
2012/01/20 面试题
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
财务会计专业个人求职信范本
2014/01/08 职场文书
回门宴答谢词
2014/01/13 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android