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 json encode datetime类型
Dec 28 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
深入解析Python的Tornado框架中内置的模板引擎
Jul 11 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
Python嵌套函数,作用域与偏函数用法实例分析
Dec 26 Python
python全局变量引用与修改过程解析
Jan 07 Python
python代码如何实现余弦相似性计算
Feb 09 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
python如何把字符串类型list转换成list
Feb 18 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
Python3 如何开启自带http服务
May 18 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
Apr 06 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
php生成随机数或者字符串的代码
2008/09/05 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
javascript中的一些注意事项 更新中
2010/12/06 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
微信小程序 image组件遇到的问题
2019/05/28 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
python对数组进行反转的方法
2015/05/20 Python
python中的全局变量用法分析
2015/06/09 Python
Python多线程爬虫简单示例
2016/03/04 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python上下文管理器和with块详解
2017/09/09 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
Python ORM编程基础示例
2020/02/02 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
python相对企业语言优势在哪
2020/06/12 Python
火车来了教学反思
2014/02/11 职场文书
大学生励志演讲稿
2014/04/25 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript