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 相关文章推荐
PyQt5每天必学之进度条效果
Apr 19 Python
Django使用详解:ORM 的反向查找(related_name)
May 30 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
python实现AES和RSA加解密的方法
Mar 28 Python
利用Python查看微信共同好友功能的实现代码
Apr 24 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
python分割一个文本为多个文本的方法
Jul 22 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
python 进程池pool使用详解
Oct 15 Python
Python如何急速下载第三方库详解
Nov 02 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 中执行系统外部命令
2006/10/09 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
vue递归获取父元素的元素实例
2020/08/07 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python实现rest请求api示例
2014/04/22 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
Python使用gRPC传输协议教程
2018/10/16 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
慰问敬老院活动总结
2014/04/26 职场文书
家长给学校的建议书
2014/05/15 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
推销搭讪开场白
2015/05/28 职场文书
成绩单家长意见
2015/06/03 职场文书
昆虫记读书笔记
2015/06/26 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle