最近学习了python的一些服务器端编程,记录在此。
发送get/post请求
# coding:utf-8import 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-8from BaseHTTPServer import HTTPServer,BaseHTTPRequestHandlerclass 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()上,不知道读取多少。
新闻热点
疑难解答
图片精选