如何避免 QNetwork请求将 RHELP 动词发送到 FTP 服务器

How to avoid QNetworkRequest to send the RHELP verb to the FTP Server?

本文关键字:FTP 服务器 QNetwork 何避免 请求 RHELP      更新时间:2023-10-16

场景:
我正在我的应用程序中实现使用 Qt 4.7.x
FTP 获取功能Qt文档指出QFtp已被弃用,改用QNetworkAccessManager,所以我正在做;)
我用一些FTP服务器测试了我编写的代码,它似乎工作正常。

问题:
当我使用我的 ftp get 类连接到我的本地自制(非常简单(ftp 服务器时,我收到以下错误:请求:500 没有可用的帮助。我使用 tcpdump 跟踪了 ftp 通信,实际上我看到 QNetworkAccessManager/QNetworkRequest 向服务器发送一个 HELP 动词,一旦它获得 230 个用户登录

不幸的是,我的服务器不支持。现在有没有办法将Qt配置为不发送HELP动词?在线阅读相关课程的Qt Doc并没有帮助。

可能没有办法避免这种情况,除非你想重新实现FTP后端。通过浏览FTP后端的源代码,您可以发现发送HELP命令的目的是找出服务器是否支持"SIZE"和"MDTM"命令。

最简单的解决方案可能是在 FTP 服务器中为 HELP 命令实现一个最小的处理程序,该处理程序以适当的 200/211/214 响应进行响应。

编辑:请参阅 http://qt.gitorious.org/qt/qt/blobs/4.8/src/network/access/qnetworkaccessftpbackend.cpp#line350,了解后端对响应的期望。这并不复杂。

它不可配置。您可以在此处查看正在发生的事情的源代码:http://qt.gitorious.org/qt/qt/blobs/4.7/src/network/access/qnetworkaccessftpbackend.cpp#line300

如果你可以构建自己的Qt版本,那么它可以很容易地被抑制。但是,升级 FTP 服务器以支持 HELP 命令可能更容易。