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 相关文章推荐
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
用python3教你任意Html主内容提取功能
Nov 05 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
Python求均值,方差,标准差的实例
Jun 29 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
用Python解数独的方法示例
Oct 24 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
python爬虫实例之获取动漫截图
May 31 Python
python怎么判断模块安装完成
Jun 19 Python
Pycharm新手使用教程(图文详解)
Sep 17 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 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计算2点经纬度之间的距离代码
2013/08/12 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
asp 的 分词实现代码
2007/05/24 Javascript
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
JavaScript prototype对象的属性说明
2010/03/13 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
Python应用库大全总结
2018/05/30 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
详解Python是如何实现issubclass的
2019/07/24 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
出国留学介绍信
2014/01/13 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
宣传口号大全
2014/06/16 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
同学聚会祝酒词
2015/08/10 职场文书
用Python实现Newton插值法
2021/04/17 Python
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis