ホームページ  >  記事  >  バックエンド開発  >  Python サーバー側でリクエストを送受信するための実装コード

Python サーバー側でリクエストを送受信するための実装コード

WBOY
WBOYオリジナル
2016-06-16 08:41:261326ブラウズ

私は最近、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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。