这是我的代码:
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)
如何编写函数以从路径重定向到另一个?
我正在尝试创建一个绑定到 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) 我正在尝试编写一个简单的“服务器”,它继承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 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
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) 我在本地网络上为我的家人创建了一个简单的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 服务器
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
python ×5
http ×3
httpserver ×3
post ×2
python-3.x ×2
get ×1
server ×1
sockets ×1
unix-socket ×1
windows ×1