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连接sql server乱码的解决方法
Jan 28 Python
python保存字符串到文件的方法
Jul 01 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
python如何实现一个刷网页小程序
Nov 27 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
python3.6使用SMTP协议发送邮件
May 20 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 Python
python获取天气接口给指定微信好友发天气预报
Dec 28 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
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
Javascript复制实例详解
2016/01/28 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
python正则表达式之作业计算器
2016/03/18 Python
Python卸载模块的方法汇总
2016/06/07 Python
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
中式结婚主持词
2014/03/14 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
大学毕业生个人总结
2015/02/28 职场文书
建党伟业的观后感
2015/06/01 职场文书
教务处教学工作总结
2015/08/10 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
详解Redis瘦身指南
2021/05/26 Redis