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直接访问私有属性的简单方法
Jul 25 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
python针对excel的操作技巧
Mar 13 Python
详解python和matlab的优势与区别
Jun 28 Python
python3实现高效的端口扫描
Aug 31 Python
django实现类似触发器的功能
Nov 15 Python
深入理解Python 多线程
Jun 16 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
基于Python爬取股票数据过程详解
Oct 21 Python
七个非常实用的Python工具包总结
Jun 15 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上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
基于jquery的图片懒加载js
2010/06/30 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
js闭包实例汇总
2014/11/09 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
快速查询Python文档方法分享
2017/12/27 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
Python循环结构的应用场景详解
2019/07/11 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
python中有函数重载吗
2020/05/28 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
优秀毕业生求职推荐信范文
2013/11/21 职场文书
大客户销售经理职责
2013/12/04 职场文书
校园广播稿500字
2014/02/04 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
大雁塔导游词
2015/02/04 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL