python服务器端收发请求的实现代码


Posted in Python onSeptember 29, 2014

最近学习了python的一些服务器端编程,记录在此。

发送get/post请求

# coding:utf-8
import httplib,urllib #加载模块
#urllib可以打开网站去拿
#res = urllib.urlopen('http://baidu.com');
#print res.headers
#定义需要进行发送的数据   
params = urllib.urlencode({'param':'6'});
#定义一些文件头   
headers = {"Content-Type":"application/x-www-form-urlencoded",
      "Connection":"Keep-Alive",'Content-length':'200'};
#与网站构建一个连接
conn = httplib.HTTPConnection("localhost:8765");
#开始进行数据提交  同时也可以使用get进行
conn.request(method="POST",url="/",body=params,headers=headers);
#返回处理后的数据
response = conn.getresponse();
print response.read()
#判断是否提交成功
if response.status == 200:
  print "发布成功!^_^!";
else:
  print "发布失败\^0^/";
#关闭连接
conn.close();

利用urllib模块可以方便的实现发送http请求.urllib的参考手册

http://docs.python.org/2/library/urllib.html

建立http服务器,处理get,post请求

# coding:utf-8
from BaseHTTPServer import HTTPServer,BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
  def _writeheaders(self):
    print self.path
    print self.headers
    self.send_response(200);
    self.send_header('Content-type','text/html');
    self.end_headers()
  def do_Head(self):
    self._writeheaders()
  def do_GET(self):
    self._writeheaders()
    self.wfile.write("""<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
</head>
<body>
<p>this is get!</p>
</body>
</html>"""+str(self.headers))
  def do_POST(self):
    self._writeheaders()
    length = self.headers.getheader('content-length');
    nbytes = int(length)
    data = self.rfile.read(nbytes)
    self.wfile.write("""<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
</head>
<body>
<p>this is put!</p>
</body>
</html>"""+str(self.headers)+str(self.command)+str(self.headers.dict)+data)
addr = ('',8765)
server = HTTPServer(addr,RequestHandler)
server.serve_forever()

注意这里,python把response的消息体记录在了rfile中。BaseHpptServer没有实现do_POST方法,需要自己重写。之后我们新建类RequestHandler,继承自 baseHTTPServer 重写do_POST方法,读出rfile的内容即可。
但是要注意,发送端必须指定content-length.若不指定,程序就会卡在rfile.read()上,不知道读取多少。

参考手册 http://docs.python.org/2/library/basehttpserver.html

Python 相关文章推荐
使用Python3制作TCP端口扫描器
Apr 17 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
Django内容增加富文本功能的实例
Oct 17 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
在python中使用with打开多个文件的方法
Jan 07 Python
python write无法写入文件的解决方法
Jan 23 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
python实现mean-shift聚类算法
Jun 10 Python
分享一个python的aes加密代码
Dec 22 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 Python
python利用beautifulSoup实现爬虫
Sep 29 #Python
Python中为feedparser设置超时时间避免堵塞
Sep 28 #Python
跟老齐学Python之从格式化表达式到方法
Sep 28 #Python
跟老齐学Python之print详解
Sep 28 #Python
跟老齐学Python之正规地说一句话
Sep 28 #Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 #Python
跟老齐学Python之不要红头文件(2)
Sep 28 #Python
You might like
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
使用jQuery实现购物车结算功能
2017/08/15 jQuery
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
python利用不到一百行代码实现一个小siri
2017/03/02 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python扩展内置类型详解
2018/03/26 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
python mysql断开重连的实现方法
2019/07/26 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
python创建文本文件的简单方法
2020/08/30 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
实习报告怎么写
2019/06/20 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle