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系列之从文件读取和保存数据
May 23 Python
Python中的日期时间处理详解
Nov 17 Python
python 常用的基础函数
Jul 10 Python
python向图片里添加文字
Nov 26 Python
浅析Python3 pip换源问题
Jan 06 Python
详解python破解zip文件密码的方法
Jan 13 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
python属于跨平台语言码
Jun 09 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
python logging模块的使用
Sep 07 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
Python基础之元类详解
Apr 29 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/12/06 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
python append、extend与insert的区别
2016/10/13 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Android分包MultiDex策略详解
2017/10/30 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
Python文件操作基础流程解析
2020/03/19 Python
django正续或者倒序查库实例
2020/05/19 Python
使用python实现名片管理系统
2020/06/18 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
精细化工应届生求职信
2013/11/17 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
2014组织生活会方案
2014/05/19 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
小学英语复习计划
2015/01/19 职场文书
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript