python连接服务器代码_python服务器端收发请求的实现代码
最近學習了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
本文標題: python服務器端收發請求的實現代碼
本文地址: http://www.cppcns.com/jiaoben/python/114375.html
總結
以上是生活随笔為你收集整理的python连接服务器代码_python服务器端收发请求的实现代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 地理信息_GitHub -
- 下一篇: 无人驾驶图像数据集_自动驾驶数据集