最近學習了python的一些服務器端編程,記錄在此。
發(fā)送get/post請求
# coding:utf-8 import httplib,urllib #加載模塊 #urllib可以打開網站去拿 #res = urllib.urlopen('http://baidu.com'); #print res.headers #定義需要進行發(fā)送的數(shù)據 params = urllib.urlencode({'param':'6'}); #定義一些文件頭 headers = {"Content-Type":"application/x-www-form-urlencoded", "Connection":"Keep-Alive",'Content-length':'200'}; #與網站構建一個連接 conn = httplib.HTTPConnection("localhost:8765"); #開始進行數(shù)據提交 同時也可以使用get進行 conn.request(method="POST",url="/",body=params,headers=headers); #返回處理后的數(shù)據 response = conn.getresponse(); print response.read() #判斷是否提交成功 if response.status == 200: print "發(fā)布成功!^_^!"; else: print "發(fā)布失敗\^0^/"; #關閉連接 conn.close();
利用urllib模塊可以方便的實現(xiàn)發(fā)送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沒有實現(xiàn)do_POST方法,需要自己重寫。之后我們新建類RequestHandler,繼承自 baseHTTPServer 重寫do_POST方法,讀出rfile的內容即可。
但是要注意,發(fā)送端必須指定content-length.若不指定,程序就會卡在rfile.read()上,不知道讀取多少。
參考手冊 http://docs.python.org/2/library/basehttpserver.html
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
