イントロダクション
PythonのSocketからHTTPServerへのデータ送信後にレスポンスを返そうとするとエラーになる、ちなみにURLにブラウザでアクセスしたときは問題なく表示する。
<エラーメッセージ>
Exception happened during processing of request from ('127.0.0.1', 50519) ・ ・ self._sock.sendall(view[write_offset:write_offset+buffer_size]) error: [Errno 32] Broken pipe
<HTTPServer>
class MyMinimumServerHandler(BaseHTTPRequestHandler): def do_PSOT(self): print(self.headers) file_path = os.getcwd() + "/first.html" print("*******" + file_path + "********") print("*******" + self.path + "********") try: self.path = os.getcwd() print("File Open: " + file_path) #file = open(file_path) self.send_response(200) self.send_header('Content-type','text-html') self.end_headers() print("Created Header!") self.wfile.write("Hello") #self.wfile.write(file.read()) #file.close() print("File CLosed!") return except IOError: self.send_error(400, 'File Nout Found...')
<送信側:Socket>
def sendServer(msg): HOST = "localhost" PORT = 8000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) s.send("GET / HTTP/1.1\r\n\r\n") s.send(msg) data = s.recv(1024) print(repr(data)) s.close()
このエラーは、上の赤い字の部分に原因がありエンコードを指定しないといけないようでした。
解決1
self.wfile.write("Hello") → self.wfile.write(message.encode('utf-8')
※「message」は変数です。出力する文字をエンコード処理すると言うことです。
エラー2
一難去ってまた一難。。。
code 501, message Unsupported method ('POST')
上のようなエラーメッセージが出ました。
解決2
メソッドの定義ミスでした。サーバー「do_PSOT」→「do_POST」が正しい
エラー3
error: [Errno 32] Broken pipe
これはこのサイトを参照しました。が解決には至らず。。。
これは、ブラウザに返信の処理を行う場合はエラーが出ず、Socket送信した時に出るエラーなのですが、よく考えてみれば表示(出力)先がないならエラーになるよなぁ。。。
結果
レスポンスを返却する時に受けるもの(ブラウザなど)がないとエラーになる!当たり前か。。。