';错误请求';用Ruby下载一些文件?

';错误请求';用Ruby下载一些文件?,ruby,http,Ruby,Http,我最近休息了一段时间,我想这是一个很好的练习,看看我能以多快的速度编写一个工作程序来自动检索“.torrent”文件。我知道有现成的解决方案,但这更多的是一个编程练习 一切都很好,它运行着,检查了网站上的新种子,并试图下载它们。但这就是我遇到问题的地方;我试图下载.torrent文件的其中一个站点在我尝试下载时给了我一个包含该文件的文件,而不是torrent文件 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html&g

我最近休息了一段时间,我想这是一个很好的练习,看看我能以多快的速度编写一个工作程序来自动检索“.torrent”文件。我知道有现成的解决方案,但这更多的是一个编程练习

一切都很好,它运行着,检查了网站上的新种子,并试图下载它们。但这就是我遇到问题的地方;我试图下载.torrent文件的其中一个站点在我尝试下载时给了我一个包含该文件的文件,而不是torrent文件

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.2.3 (CentOS) Server at forums.mvgroup.org Port 80</address>
</body></html>

400错误请求
错误的请求
您的浏览器发送了此服务器无法理解的请求。


是我使用的示例,是在我的程序中下载的实际代码


我有一个隐秘的怀疑,这将是一个脑死亡的简单陷阱,但我有一个很好的时间来解决它。有人知道我为什么要得到400,或者如何解决这个问题吗?

你需要一个日志代理,这样你就可以看到哪些字节通过网络传输


如果您使用Eclipse,它有一个http代理可用。我相信这是EclipseJavaEE下载的一部分。

一个断开的链接应该返回一个
404notfound
错误。因为您可以使用浏览器检索文件,我发现还有两个可能的问题:要么您的代码中缺少浏览器自动处理的重定向,要么您缺少所需的会话ID或cookie或某些状态值。同样,浏览器将处理这些问题,但您的代码不会处理这些问题,除非您将其写入或利用正确的gem

您在上链接到的示例代码是基本的,但是没有连接到重定向,我怀疑您需要重定向。我浏览了一下你的代码,它也不能处理它们。中的“以下重定向”示例代码演示了如何执行此操作

我建议使用Ruby,因为它可以自动处理重定向和超时重试,而不是自己编写代码来检索URL,这相当于重新发明轮子。它易于使用,是那些正常的“获取URL”工作的好工具

如果您想拥有一个处理重定向、cookie和会话ID的gem,请查看。对于一般用途的任务来说,它是一个非常好的gem,尽管它实际上是为浏览网站而设计的


对于更健壮的任务,和是很好的,因为它们可以处理多个请求,尽管您需要编写更多的代码来管理文件和导航站点。下载文件就可以了。

实际的HTTP请求是什么样子的?我不知道。我相信,如果你能准确地看到线路上发生了什么,你可能会看到哪里出了问题。tcpdump或wireshark应该能够告诉你。