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脚本批量下载DesktopNexus壁纸的教程
May 06 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
Python实现的字典值比较功能示例
Jan 08 Python
python range()函数取反序遍历sequence的方法
Jun 25 Python
用Python shell简化开发
Aug 08 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
python获取时间及时间格式转换问题实例代码详解
Dec 06 Python
python Django中models进行模糊查询的示例
Jul 18 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
Python使用MapReduce进行简单的销售统计
Apr 22 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中使用PDF文档功能
2006/10/09 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
js常用DOM方法详解
2017/02/04 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
python脚本设置系统时间的两种方法
2016/02/21 Python
python常见排序算法基础教程
2017/04/13 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
python 如何将office文件转换为PDF
2020/09/22 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
战友聚会主持词
2014/04/02 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
品质保证书格式
2015/02/28 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
详解OpenCV曝光融合
2022/04/29 Python