最近学习了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(\"\"\"
this is get!
\"\"\"+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(\"\"\"
this is put!
\"\"\"+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