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 04 Python
Python 3中print函数的使用方法总结
Aug 08 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
Python实现Linux监控的方法
May 16 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
Python中IP地址处理IPy模块的方法
Aug 16 Python
Python的条件锁与事件共享详解
Sep 12 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 Python
Django+Celery实现定时任务的示例
Jun 23 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
PHP数组及条件,循环语句学习
2012/11/11 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
python实现从pdf文件中提取文本,并自动翻译的方法
2018/11/28 Python
python获取Pandas列名的几种方法
2019/08/07 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
opencv3/C++ 平面对象识别&amp;透视变换方式
2019/12/11 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
逃课上网检讨书
2014/02/20 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL