使用BaseHTTPRequestHandler编写响应主体 [英] Writing response body with BaseHTTPRequestHandler

查看:150
本文介绍了使用BaseHTTPRequestHandler编写响应主体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Python 3.2.2进行一些操作,并希望编写一个简单的Web服务器来远程访问一些数据.这些数据将由Python生成,因此我不想使用SimpleHTTPRequestHandler,因为它是文件服务器,而是我自己的处理程序.

I'm playing a little with Python 3.2.2 and want to write a simple web server to access some data remotely. This data will be generated by Python so I don't want to use the SimpleHTTPRequestHandler as it's a file server, but a handler of my own.

我从互联网上复制了一些示例,但由于响应输出流拒绝写正文内容而被困住了.

I copied some example from the internet but I'm stuck because the response outputstream refuses to write the body content.

这是我的代码:

import http.server
import socketserver

PORT = 8000

class MyHandler(http.server.BaseHTTPRequestHandler):
    def do_HEAD(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        print(self.wfile)
        self.wfile.write("<html><head><title>Title goes here.</title></head>")
        self.wfile.write("<body><p>This is a test.</p>")
        # If someone went to "http://something.somewhere.net/foo/bar/",
        # then s.path equals "/foo/bar/".
        self.wfile.write("<p>You accessed path: %s</p>" % self.path)
        self.wfile.write("</body></html>")
        self.wfile.close()

try:
    server = http.server.HTTPServer(('localhost', PORT), MyHandler)
    print('Started http server')
    server.serve_forever()
except KeyboardInterrupt:
    print('^C received, shutting down server')
    server.socket.close()

编写响应正文的正确代码应该是什么?

What should be a correct code for writing the response body?

非常感谢.

错误是:

...
  File "server.py", line 16, in do_GET
    self.wfile.write("<html><head><title>Title goes here.</title></head>")
  File "C:\Python32\lib\socket.py", line 297, in write
    return self._sock.send(b)
TypeError: 'str' does not support the buffer interface

推荐答案

Python3中的字符串与Python 2.x中的字符串不同.使用

In Python3 string is a different type than that in Python 2.x. Cast it into bytes using either

self.wfile.write(bytes("<html><head><title>Title goes here.</title></head>/html>","utf-8")) 

self.wfile.write("<html><head><title>Title goes here.</title></head></html>".encode("utf-8"))

这篇关于使用BaseHTTPRequestHandler编写响应主体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆