如何避免QNetworkRequest向FTP服务器发送RHELP动词?

3
情景:
我正在我的应用程序中实现一个FTP get功能,使用的是Qt 4.7.x
Qt文档说明QFtp类已被弃用,应该改用QNetworkAccessManager,所以我正在这样做;)。我已经用一些FTP服务器测试了我编写的代码,看起来运行良好。 问题:
当我使用我的ftp get类连接到我的本地自制(相当简单)的ftp服务器时,我收到以下错误:请求:500无可用帮助。 我使用tcpdump跟踪了ftp通信,实际上我看到QNetworkAccessManager/QNetworkRequest在收到230用户登录后向服务器发送了一个HELP动词。
不幸的是,我的服务器不支持它。有没有办法配置Qt不发送HELP动词?阅读涉及类的Qt在线文档并没有帮助。
2个回答

3

3

除非您想重新实现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以了解后端对响应的期望。这并不复杂。


难道不应该是211而不是214吗?无论如何,这不是主要问题...关键是我必须实现HELP :-/ - sergico
如果您的服务器不支持SIZE和MDTM,那么这并不重要...但如果支持,它必须是200或214。我会编辑我的回复。 - teukkam
谢谢澄清,我实际上支持SIZE命令。但我还是有点困惑:FTP RFC规定:211 系统状态或系统帮助回复 214 帮助信息(关于如何使用服务器或特定非标准命令的含义)。此答复仅对人类用户有用。这就是为什么我认为我需要一个211代码的原因。 - sergico
返回没有参数的HELP命令返回的命令列表是为了人类读者而设计的,因此它以214的形式返回。后端只需查看该命令列表是否包含SIZE或MDTM。这有点像非标准的黑客技巧,但也许这是他们能想到的最简单的解决方案。 - teukkam
1
记录一下,我按照@vipw的建议添加了HELP命令到我的FTP服务器,并且现在可以使用我的Qt类从FTP服务器获取文件了。感谢你们两个的帮助 :) - sergico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接