1

Web サイトからのファイルのダウンロードを自動化する必要があります。ファイルのダウンロード ボタンは、提供されたユーザー名とパスワードでログインした後にのみ表示されます。ログインフォームにはさらに 2 つの隠しフィールドがあり、そのうちの 1 つは生成された値を持つ csrf_token_login です。

<input type="hidden" name="csrf_token_login" value="nl9YERDFpecfITb8QwFWneoaefykxp2b" />

ログインとパスワードだけがあれば、これを Java で (java.net.HttpUrlConnection を使用して) コーディングする方法は明らかです (これについては、java.net.URLConnection を使用して HTTP 要求を起動して処理するのに優れた説明があります): POST 要求を送信します。 、Cookie を取得し、後続の要求のためにそれらを設定します。しかし、ログインフォームで csrf_token_login の生成された値を取得し、他の値で送信するにはどうすればよいですか?

ログインページの HttpURLConnection で getInputStream() を使用して読み取ると、csrf 値が得られます。しかし同時に、これにより接続が確立され、データを投稿するための接続プロパティを設定できなくなります。

private HttpURLConnection logUrlCon;
... 
BufferedReader logInput = new BufferedReader(new InputStreamReader(logUrlCon.getInputStream())); 
... // read and get csrf value OK

logUrlCon.setDoOutput(true); // throws java.lang.IllegalStateException: Already connected

ログインフォームで生成されたこのcsrf_tiken_login値を取得し、それをユーザー名とパスワードとともに投稿する方法はありますか?

4

1 に答える 1

1

ログインページのコンテンツを読み取り、正規表現を使用してデータを抽出します。隠しフィールドは非常に特徴的な形式(一意の名前など)であるため、正規表現ベースのデータ抽出に最適です。

于 2012-05-25T17:22:09.580 に答える