2011-07-17 6 views
1

私は最近、いくつかの時間を過ごしていました。私にとって自動的に '.torrent'ファイルを自動的に取り出すための作業プログラムをどれくらい速く組み立てることができるのか見栄えの良い演習になると思いました。私は既存の解決策があることを認識していますが、これはプログラミングのエクササイズの多くでした。Rubyでいくつかのファイルをダウンロードしている 'Bad Request'ですか?

すべてはうまくいっていました。新しいトレントのサイトをチェックし、ダウンロードしようとしました。しかし、これが私が問題に取り組んでいるところです。私が.torrentファイルをダウンロードしようとしているサイトの1つは、ダウンロードしようとすると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> 

..私の次の思考は、多分私は正しくファイルをダウンロードしていないよということで私の最初の考えは多分壊れたリンクだったので、私は行って、成功した私のブラウザでファイルをダウンロードし、それが壊れたリンクではありません.. Thisは私が使用した例であり、thisは私のプログラムでダウンロードを行っている実際のコードです。

これは脳死のシンプルな落書きの1つになることが判明していますが、私はそれを理解している時を過ごしています。誰が私が400を得ているのか、またはこれを修正する方法を知っていますか?

+0

実際のHTTPリクエストはどのように見えますか? – Gumbo

答えて

2

壊れたリンクは404 Not Foundエラーを返します。ブラウザでファイルを取り出すことができるので、ブラウザで自動的に処理されるコードのリダイレクト処理が欠落しているか、必要なセッションIDやCookie、または状態値が不足しているなどの2つの問題があります。繰り返しますが、ブラウザがそれらを処理しますが、コードを記述したり、正しい宝石を利用したりしない限り、コードは処理されません。

http://snippets.dzone.com/posts/show/2469にリンクしているサンプルコードは基本的ですが、必要と思われるリダイレクトに従うように配線されていません。私はあなたのコードを見て、それを処理しません。 docs for Net::HTTPの「リダイレクトに従う」サンプルコードは、その方法を示しています。

URLを取得するコードを書くのではなく、ホイールを再開発することになるので、タイムアウトの再試行とともに自動的にリダイレクトを処理するため、RubyのOpen::URIを使用することをお勧めします。これらの通常の「URLを取得する」ジョブのために使いやすく、良い作業馬です。

リダイレクトとCookieとセッションIDを処理する宝石を使用する場合は、Mechanizeをご覧ください。それは本当にウェブサイトをナビゲートするために設計されていますが、汎用タスクのための非常に良い宝石です。

より堅牢なタス​​クの場合は、複数の要求を処理できるため、とTyphoeusが良いですが、ファイルを管理してサイトをナビゲートするためのコードを少し書く必要があります。ファイルをダウンロードしても問題ありません。

0

ロギングプロキシが必要です。その間にロギングプロキシが必要なので、どのバイトが配線を通過するかを確認できます。

Eclipseを使用している場合、httpプロキシが使用可能です。私はそれがEclipse Java EEダウンロードの一部であると信じています。

+0

tcpdumpは私が見たいものを見せてくれますか? –

+0

私は分かりません。私はあなたが何が間違っているかを見ることができるかもしれないワイヤーを通り抜けるものを正確に見ることができると信じています。 –

+0

tcpdumpまたはwiresharkがあなたに伝えることができるはずです。 –

関連する問題