问题标签 [basehttprequesthandler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
914 浏览

python - 仅使用标准库创建 Web 服务器

我想只使用 std 库在 Python 中实现一个网页。

我用 PHP 完成了它,但我想用 Python 完成它,我很难理解文档。

这是我在 PHP 中所做的:

访问http://localhost:8888/project/src/car.php

用户必须填写一份表格,其中指定了汽车的品牌。然后网站在http://localhost:8888/project/src/car.php?brand=toyota
中返回汽车的 JSON 列表, 效果很好。

在 PHP 中这很容易,但我找不到只使用标准库在 Python 中做到这一点的方法。
你有什么建议吗?

这是我到目前为止所拥有的:

服务器.py:

索引.html:

用户登陆 index.html 有一个要完成的表格。当用户填写表格时,打开文件:http://localhost:8888/car.py?brand=toyota

该脚本适用于http://localhost:8888/而不是http://localhost:8888/car.py(我的 PHP 脚本也是如此),但这不是问题。

填写表格后,我不知道如何检索变量制造商并显示来自品牌的汽车列表。在 car.py 中,我有一个我需要的每个品牌的汽车列表,所以我只需要从品牌中获取正确的汽车并将其打印为 JSON,而无需额外的 HTML。

我遇到的问题:填写表格只需打印整个 car.py 文件。

表单不安全不是问题(您可以通过将 ?brand=toyota 附加到 url 来获得结果)。

这就是我启动服务器的方式:

你有什么建议吗 ?
谢谢你的关注

0 投票
1 回答
84 浏览

python - 我需要阿帕奇吗?

我是服务器设置的新手,我想了解 - 我需要 Apache 还是 smth 来处理 HTTP 请求?

例如,我收到GET /api请求,我想发送响应。我可以在没有 Apache 的情况下做到这一点吗?例如,只需创建BaseHTTPRequestHandler Python 类并重新定义do_GET

并使用如下代码:

那么我可以在没有 Apache 的情况下做到这一点吗?如果是,为什么人们需要 Apache?

PS: idk 没关系,但我想在我的服务器上使用证书身份验证。

PSS:说清楚 - 我的公司只是“租用”一个应用程序,所以我不需要编写应用程序代码。我需要通过我的服务器处理来自该应用程序的一些 POST 请求,然后将一些 POST 请求从我的服务器发送到该应用程序(发送到它的服务器)。因此,可以使用我在问题中描述的清晰的 Linux 和 python 脚本来做到这一点吗?还是我需要安装一些 HTTP 服务器(如 Apache)?

0 投票
1 回答
71 浏览

python-3.x - BaseHTTPRequestHandler cgi.parse_multipart 永远不会返回

我的代码段中有以下代码段do_POST

它一直持续到最后postvars一行,然后停止。在我重新启动调试过程之前,甚至不会处理后续请求。

为了完整起见,这是我用来发布的 JS FormData

其他简单POSTJSON字符串形式可以正常工作,但这需要是多部分的,因为我还在表单中上传了一个文件。我无法弄清楚我的代码有什么问题,它看起来或多或少与其他人multipart处理 Python 3 的代码相同。

也可能是一个有趣的线索是,如果我在调试控制台中尝试以下操作:

...这个调试命令也永远卡住了。

0 投票
2 回答
637 浏览

python - python 和 BaseHTTPRequestHandler :在生成的页面的标题中添加一个空的 favicon

在 python 3.8 上,我使用模块 http.server 中的 BaseHTTPRequestHandler 和 HTTPServer 为我的学生创建了一个简约的 python 服务器

当我转到服务器上的 url 时,我在浏览器调试工具中看到两个 http 请求:

  • 一个用于页面
  • 一个用于favicon(当前head html页面不包含favicon的链接标签,当前head为空)

在此处输入图像描述

我想阻止第二个请求(对于 favicon)。我的问题是:使用“BaseHTTPRequestHandler”和“HTTPServer”类是否可以自定义生成页面的标题?我正在寻找一种方法来添加这样的空图标<link rel="icon" href="data:;base64,=">:(https://stackoverflow.com/a/13416784/2137454

0 投票
1 回答
76 浏览

python - 我的 http 服务器收到了包含文件的发布请求,如何也使用 POST 方法转发到外部 URL

我有一个问题,我搜索了很多,但这里的代码都没有满足我的要求

我正在使用 http.server - BaseHTTPRequestHandler 运行 python 本地服务器

这是我的代码

我尝试了一些代码,例如:

注意:我知道该文件将使用帖子名称file 该代码有效,但问题是我没有发送文件类型或文件名,我真的无法得到它。我的方式是否正确,或者我应该使用更有效的代码

0 投票
1 回答
91 浏览

python - `HTTPServer` 或`BaseHTTPRequestHandler` 中是否发生了一些缓存或分叉?

可能是我的代码实现错误,但我发现虽然我可以从文字数据中提供 GET 请求,但我无法更新该数据并将其显示为在后续 GET 请求中更新。我也不能让 POST 请求更新数据。

所以它的行为就好像在 Python 的 HTTPServer 或 BaseHTTPRequestHandler 的某个地方发生了缓存或分叉。

提前感谢您查看它,但是,轻轻地,不,我不想使用非核心 3.8 模块或使用完全不同的框架或某些 Flask 重新编写。我认为这应该可行,但它行为不端,我无法找出原因。如果我使用的是 C 或 Go 的内置库,它预计它不会像我一样令人头疼(对我来说)。

为了演示,您将运行以下 python 实现,并加载http://127.0.0.1:8081/两到三次:

即使在加载http://127.0.0.1:8081/之前,也可以尝试发布以向self.files字典添加内容。例如

您可以看到服务器响应,并打印收到的数据,现在应该在其中self.files,因此/应该显示它。您可以将其与以下内容混合使用:

但是这些都没有添加self.files['/new_file']or '/new_file2',而且还不清楚为什么。

一个应该能够请求/new_file/new_file2,而那些是 404。

中的最后几行do_GET,多个GET /请求应该显示更多列出的项目。

虽然将那些添加新键和值的行移到self.files顶部do_GET显示它确实更新了,但只有一次,这似乎更奇怪:

0 投票
0 回答
59 浏览

python-3.x - 如何使用 BaseHTTPRequestHandler 重定向 POST 请求

我目前正在尝试将 POST 请求作为 POST 请求重定向到不同的位置。阅读 HTTP Specs,我发现正确的方法是使用 307 状态代码。但是检查请求我发现我的 POST 在重定向后转换为 GET 请求。有任何想法吗?我的代码是(python):

0 投票
0 回答
203 浏览

python - 为什么每隔几次写入,写入 HTTP 流就会暂停 > 100 毫秒?

我正在尝试使用带有 aiohttp 的多部分流通过 http 流式传输 MJPEG 视频。

我有一个基于james4388 的 Gist 的实现。我目前正在尝试每 30 毫秒左右发送一个新的 JPEG 图像。对循环进行计时表明,await mpwriter.write(response, close_boundary=False)通常需要 0.3 毫秒,但每 3-5 次需要 150-200 毫秒。这限制了我可以达到的最大帧速率,并将延迟引入我试图避免的流中。

使用的循环是

我也尝试过使用BaseHttpServer。这在调用 时表现出相同的行为self.wfile.write(jpg.tostring())

我假设当底层缓冲区通过网络刷新时会发生这种暂停,尽管我response.drain()在每个部分之后调用。每个 JPEG 帧(因此多部分流的每个部分)大小为 441kB,因此对于 30fps,我将发送 13MB/s 但目前我达到 5.3MB/s。这是在专用测试 LAN 连接上,所以我认为带宽不是问题(另一个使用 MJPEG 流的设备达到 >15MB/s)。

使图像尺寸更小(例如使用更高的压缩率)会增加我在命中块之前可以发送的帧数,但整个块仍然存在,我的吞吐量仍然只有 4.3MB/s。

0 投票
1 回答
244 浏览

python - 请求超时:Python 的 HTTPServer 中的 timeout('timed out')

我正在尝试创建一个简单的 HTTP 服务器,它使用继承 BaseHTTPServer 的 Python HTTPServer。[https://github.com/python/cpython/blob/main/Lib/http/server.py][1]

网上有很多这种方法的例子,我不相信我在做任何不寻常的事情。

我只是通过以下方式导入类:“从 http.server 导入 HTTPServer,BaseHTTPRequestHandler”在我的代码中。

我的代码覆盖 do_GET() 方法来解析路径变量以确定要显示的页面。

但是,如果我启动此服务器并在本地连接到它(例如:http://127.0.0.1:50000),则第一页加载正常。如果我导航到另一个也可以正常工作的页面(通过我的第一页链接),但是,有时(这有点零星),会有延迟并且服务器日志显示请求超时:超时('超时' ) 错误。我已将其追踪到 BaseHTTPServer 类中的 handle_one_request 方法:

您可以在“except socket.timeout as e:”子句中看到异常是在哪里引发的。

我尝试通过将其包含在我的代码中来覆盖此方法,但不清楚是什么导致了错误,所以我遇到了死胡同。我尝试创建非常基本的 HTML 页面,以查看页面本身是否存在某些内容,但即使是“空白”页面也会导致相同的零星问题。

奇怪的是,有时页面会立即加载,几乎是随机加载,然后会超时。有时是同一个页面,有时是不同的页面。

我玩过 http.timeout 设置,但没有区别。我怀疑这是一些潜在的套接字问题,但无法进一步诊断。

这是在运行 Big Sur 11.3.1 和 Python 版本 3.9.4 的 Mac 上。

关于可能导致此超时的任何想法,特别是关于解决方案的任何建议。任何指针将不胜感激。

0 投票
0 回答
336 浏览

javascript - 如何跟踪在后端运行的方法的进度并在前端显示进度?

我目前正在开发一个框架,其中我有一个 Python 后端、一个 API 文件作为通信层(也在 Python 中,使用来自 http.server 的 BaseHTTPRequestHandler)和一个 JavaScript/HTML 前端。我的框架当前设置的方式是用户在前端输入一些内容,这会触发使用 jQuery 的 POST 请求。

此 POST 请求为要在后端(服务器)上运行的 Python 方法提供所需的输入。我遇到的问题是,只要方法仍在运行,我希望能够显示进度条并将其显示在用户界面(前端)上。

任何人都知道如何实现这一点?

编辑:这是我当前架构的代码示例,前端有一个假进度条。

接口:

前端(JavaScript/HTML):