私は最近、Python でサーバーサイドプログラミングを学び、ここに記録しました。
取得/投稿リクエストを送信する
# 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 モジュールを使用すると、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 は応答メッセージの本文を rfile に記録することに注意してください。 BaseHpptServer は do_POST メソッドを実装していないため、自分で書き直す必要があります。その後、新しいクラス RequestHandler を作成し、baseHTTPServer を継承し、do_POST メソッドを書き換えて、rfile の内容を読み取ります。
ただし、送信者は content-length を指定する必要があることに注意してください。指定しない場合、プログラムは rfile.read() でスタックし、どれだけ読み取るかがわかりません。
リファレンスマニュアル http://docs.python.org/2/library/basehttpserver.html