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 相关文章推荐
Python入门篇之条件、循环
Oct 17 Python
Python中模块与包有相同名字的处理方法
May 05 Python
使用TensorFlow实现SVM
Sep 06 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
python矩阵的转置和逆转实例
Dec 12 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
Python Subprocess模块原理及实例
Aug 26 Python
Python对接支付宝支付自实现功能
Oct 10 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
python 回溯法模板详解
Feb 26 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
总结Pyinstaller打包的高级用法
Jun 28 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
laravel中的错误与日志用法详解
2016/07/26 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
jquery radio 操作代码
2011/03/16 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
六十岁生日答谢词
2014/01/10 职场文书
项目经理岗位职责
2015/01/31 职场文书
金陵十三钗观后感
2015/06/04 职场文书
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技
win10搭建配置ftp服务器的方法
2022/08/05 Servers