标签: basehttprequesthandler

使用BaseHTTPRequestHandler重定向功能

这是我的代码:

from http.server import HTTPServer, BaseHTTPRequestHandler

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b'some text')

def redirect(location):
    # redirect

server = HTTPServer(('localhost', 1111), Handler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

如何编写函数以从路径重定向到另一个?

basehttpserver python-3.x basehttprequesthandler

4
推荐指数
1
解决办法
3084
查看次数

python - 将 BaseHTTPRequestHandler 与 UnixStreamServer 一起使用会导致异常

我正在尝试创建一个绑定到 Unix 域套接字的基本 HTTP 服务器,但是将 BaseHTTPRequestHandler 子类与 UnixStreamServer 一起使用会创建一个异常,表明它们不能一起工作。

玩具服务器.py:

from SocketServer import UnixStreamServer
from BaseHTTPServer import BaseHTTPRequestHandler

class MyHandler(BaseHTTPRequestHandler):
  def do_GET(self):
    self.send_response(200)
    self.send_header("Content-Type", "text/plain")
    self.end_headers()
    self.wfile.write("Hi!")

server = UnixStreamServer('./mysocket.sock', MyHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

然后我发送一个带有 的请求curl --unix-socket ./mysocket.sock http:/hello,这会导致服务器上出现以下异常(使用 Python 2.7.11):

Exception happened during processing of request from 
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", …
Run Code Online (Sandbox Code Playgroud)

python sockets unix-socket basehttprequesthandler

4
推荐指数
1
解决办法
1575
查看次数

如何将POST数据解析到字典中

我正在尝试编写一个简单的“服务器”,它继承BaseHTTPRequestHandler并能够接收 GET 和 POST 请求。server.py到目前为止,我有一个文件,如下所示:

from http.server import BaseHTTPRequestHandler, HTTPServer
from cgi import parse_header, parse_multipart
from urllib.parse import parse_qs

host = "localhost"
port = 8080

hello_msg = "Server running..."

class Server(BaseHTTPRequestHandler):
    def _set_headers(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_GET(self):
        self.respond_OK(hello_msg)

    def do_POST(self):
        print("Post")

        data = self.parse_POST()

        print(data)
        print(type(data))

        self.respond_OK("End post")


    def parse_POST(self):
        ctype, pdict = parse_header(self.headers['content-type'])
        if ctype == 'multipart/form-data':
            postvars = parse_multipart(self.rfile, pdict)
        elif ctype == 'application/x-www-form-urlencoded':
            length = int(self.headers['content-length'])
            postvars = parse_qs(
                    self.rfile.read(length), 
                    keep_blank_values=1) …
Run Code Online (Sandbox Code Playgroud)

python post python-3.x basehttprequesthandler server

4
推荐指数
1
解决办法
1628
查看次数

如何在Windows中使用Python BaseHttpRequestHandler将图像传输到客户端?

我知道之前已经提出过这个问题,例如:我如何使用Python BaseHTTPServerRequestHandler do_GET方法提供图像内容类型?,但"将文件打开模式设置为二进制"的典型答案对我不起作用.

我正在使用Windows.所有对文本数据(html,js,css)的请求都没有任何问题.图像和字体请求不能正确满足.返回的响应总是包含大约150个字节(但实际上应该大约为50k).所以,我认为基本上是空的回应,缺少图像和字体.到目前为止,我在Linux下使用相同的代码没有遇到任何问题:

content = open(content_path, 'rb')
...
self.send_response(200)
self.send_header('Content-type', 'image/jpeg')
self.end_headers()
self.wfile.write(content.read) 
content.close()  
Run Code Online (Sandbox Code Playgroud)

我最初使用默认模式'打开',在阅读了类似问题的回复后,我添加了二进制标志,假设它可以解决问题,但事实并非如此.这里有一些编码问题吗?同样,这在Linux下也能正常工作.这是打印到控制台的"内容"的值:

<open file [my_file_path], mode 'rb' at 0x02A9BA18> with mime-type image/jpeg
Run Code Online (Sandbox Code Playgroud)

如果它是相关的,我可能还应该提到图像已经在应用程序早期之前由python PIL库调整大小.任何帮助表示赞赏.

python windows http python-imaging-library basehttprequesthandler

3
推荐指数
1
解决办法
2134
查看次数

为什么do_GET比do_POST快得多

Python的BaseHTTPRequestHandler对于通过邮寄发送的表单存在问题!

我见过其他人问同样的问题(为什么GET方法比POST更快?),但我的情况时差太大(1秒)

Python服务器:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import datetime


def get_ms_since_start(start=False):
    global start_ms
    cur_time = datetime.datetime.now()
    # I made sure to stay within hour boundaries while making requests
    ms = cur_time.minute*60000 + cur_time.second*1000 + int(cur_time.microsecond/1000)
    if start:
        start_ms = ms
        return 0
    else:
        return ms - start_ms

class MyServer(BaseHTTPRequestHandler, object):
    def do_GET(self):
        print "Start get method at %d ms" % get_ms_since_start(True)
        field_data = self.path
        self.send_response(200)
        self.end_headers()
        self.wfile.write(str(field_data))
        print "Sent response at %d ms" % get_ms_since_start()
        return

    def …
Run Code Online (Sandbox Code Playgroud)

post http basehttpserver httpserver basehttprequesthandler

3
推荐指数
1
解决办法
669
查看次数

python http web服务器

我在本地网络上为我的家人创建了一个简单的http服务器,当我添加一个html文件和png图片并试图查看HTML文件时,我的图像无法加载.
它说:
"图像'的http:// ...:255/header.png’无法显示,因为它包含的错误."
这是我的一些代码

        elif self.path.endswith(".bm"):   #our dynamic content
            self.send_response(200)
            self.send_header('Content-type',    'text/html')
            self.end_headers()
            f= open(curdir + sep + self.path)
            ren = self.render(f.read())
            self.wfile.write(ren)
            return
        elif self.path.endswith('.png'):
            print "IMAGE WANTED!"
            self.send_response(200)
            self.send_header('Content-type',    'image/png')
            self.end_headers()
            f = open(curdir + sep + self.path)
            self.wfile.write(f.read())
            return
        elif self.path.endswith('.jpg'):
            print "IMAGE WANTED!"
            self.send_response(200)
            self.send_header('Content-type',    'image/jpeg')
            self.end_headers()
            f= open(curdir + sep + self.path)
            print f.read()
            self.wfile.write(f.read())
            return
        elif self.path.endswith(".esp"):
            self.send_response(200)
            self.send_header('Content-type',    'text/plain')
            self.end_headers()
            self.wfile.write("This Format Is Not Supported Any More, Upgrade To …
Run Code Online (Sandbox Code Playgroud)

python http httpserver basehttprequesthandler

2
推荐指数
1
解决办法
3191
查看次数

如何将参数传递给 Python 中 BaseHTTPRequestHandler 类的 GET 处理程序方法

我有一个用 Python 创建的 HTTP 服务器

    from http.server import BaseHTTPRequestHandler, HTTPServer
    import bson.json_util
    import json
    server = HTTPServer((ip, port), GetHandler)
    print ('Starting server, use <Ctrl-C> to stop')
    server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

在哪里 GetHandler

class GetHandler(BaseHTTPRequestHandler):
    def _set_headers(self):
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()

    def do_GET(self):
        json_string = json.dumps({"message" : "Hello"}, default=bson.json_util.default)+"\n"
        self._set_headers()
        self.wfile.write(json_string.encode())#encoding='UTF-8'
        return
Run Code Online (Sandbox Code Playgroud)

假设我想从行do_GET中将一个变量传递给类的方法:我该怎么做?GetHandlerserver = HTTPServer((ip, port), GetHandler)

编辑

作为示例,假设我my_str在该行之前定义了一个字符串,server = HTTPServer((ip, port), GetHandler)并且我想将此字符串用作响应消息。

python get parameter-passing httpserver basehttprequesthandler

2
推荐指数
1
解决办法
1172
查看次数