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实例分享:快速查找出被挂马的文件
Jun 08 Python
python2 与python3的print区别小结
Jan 16 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
用 Python 连接 MySQL 的几种方式详解
Apr 04 Python
python对视频画框标记后保存的方法
Dec 07 Python
Python3中的bytes和str类型详解
May 02 Python
Python Threading 线程/互斥锁/死锁/GIL锁
Jul 21 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
解决Keras中CNN输入维度报错问题
Jun 29 Python
Python如何测试stdout输出
Aug 10 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 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图片验证码代码
2008/03/27 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
Vue 全局loading组件实例详解
2018/05/29 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
Python 私有函数的实例详解
2017/09/11 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Python WSGI的深入理解
2018/08/01 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
Django的models模型的具体使用
2019/07/15 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
Python的垃圾回收机制详解
2019/08/28 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
材料化学应届生求职信
2013/10/09 职场文书
给排水专业应届生求职信
2013/10/12 职场文书
学习保证书范文
2014/04/30 职场文书
司法局火灾防控方案
2014/06/05 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
家长通知书家长意见
2014/12/30 职场文书
研究生导师推荐信
2015/03/25 职场文书