3

https Web ページにログインし、Java を使用してファイルをダウンロードする必要があります。私は事前にすべての URL を知っています。

baseURL = // a https URL;
urlMap = new HashMap<String, URL>();
urlMap.put("login", new URL(baseURL, "exec.asp?login=username&pass=XPTO"));
urlMap.put("logout", new URL(baseURL, "exec.asp?exec.asp?page=999"));
urlMap.put("file", new URL(baseURL, "exec.asp?file=111"));

Firefox などの Web ブラウザーでこれらすべてのリンクを試すと、機能します。

今私がするとき:

urlConnection = urlMap.get("login").openConnection();
urlConnection.connect();
BufferedReader in = new BufferedReader(
    new InputStreamReader(urlConnection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
in.close();

ログイン ページの HTML が再び表示されるだけで、ファイルのダウンロードに進むことができません。

ありがとう!

4

5 に答える 5

5

問題はCookieの保存と返却にある可能性が高いというAlnitakに同意します。

私が使用したもう1つの優れたオプションは、 JakartaCommonsのHttpClientです。

余談ですが、これが制御するサーバーである場合、ユーザー名とパスワードをクエリ文字列として送信することは安全ではないことに注意する必要があります(HTTPSを使用している場合でも)。HttpClientは、POSTを使用したパラメーターの送信をサポートしています。これを考慮する必要があります。

于 2009-01-07T17:57:24.243 に答える
3

ログイン リクエストでログインできない原因が他にあるとしても、ログイン ページで生成された Cookie を保存して返さない限り、ダウンロード ページに進むことはまずありません。

これは、HTTP 自体がステートレスであるためです。そのため、現在のコードでは、2 番目のダウンロード リクエストがログインしたばかりの同じユーザーからのものであることをリモート サーバーが判断する方法がありません。

于 2009-01-07T17:48:08.707 に答える
2

Java CURL http://sourceforge.net/projects/javacurlを見てください。以前に https Web サイトにログインしてダウンロードするために使用したことがあります。ブラウザ ID のスプーフィングなどの機能があります。これにより、ログインにリダイレクトされるという問題が解決する可能性があります。

彼らはそれにEclipseプラグインを提供していますが、私はそれなしで使用しましたが、正常に動作します.

または、wget を使用して Java から呼び出すこともできます。

于 2009-01-07T17:46:36.293 に答える
1

おそらく、 HttpUnitを試してみたいと思うでしょう。Web サイトのテストを念頭に置いて書かれていますが、問題に使用できる場合があります。

彼らのウェブサイトから:

「... Java で記述された HttpUnit は、フォーム送信、JavaScript、基本的な http 認証、Cookie、自動ページ リダイレクトなど、ブラウザの動作の関連部分をエミュレートし、Java テスト コードが返されたページをテキスト、XML DOM、またはフォーム、テーブル、およびリンクのコンテナ。」

于 2009-01-07T18:06:19.060 に答える