1

そのため、ログインフォームがあるこのWebサイトがあります。ログインしてからファイルをダウンロードしたい。フォームを送信すると、ユーザー名とパスワードが http POST で送信されるだけでなく、隠し<input>タグにあるトークンも送信されます。さて、私の問題は、JavaでURLを開いてトークンを取得してPOSTを作成すると、HttpClient. Web サイトを呼び出してトークンを取得し、投稿を行うために、何らかの形で同じクライアントを使用する必要があります。残念ながら、ファイルにアクセスしようとすると、403 FORBIDDEN リターン コードが返されます。これは私がこれまでに持っているものです:

public static void main(String[] args){



    try {
        String token = getTokenFromPage("http://my.url");   

        HttpContext context = new BasicHttpContext();   
        DefaultHttpClient client = new DefaultHttpClient();         

        List <NameValuePair> parameters = new ArrayList <NameValuePair>();
        HttpPost post = new HttpPost("http://my.url");
        parameters.add(new BasicNameValuePair("username", "MYNAME"));
        parameters.add(new BasicNameValuePair("password", "MYPW"));
        parameters.add(new BasicNameValuePair("token", token));

        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, HTTP.UTF_8);
        post.setEntity(entity); 

        System.out.println("URL: " + post.getURI());
        HttpResponse postResponse = client.execute(post, context);
        System.out.println(postResponse.getStatusLine());
        EntityUtils.consume(postResponse.getEntity());
//Now download the file

        HttpGet httpget = new HttpGet("http://url.to.file");

        HttpResponse getResponse = client.execute(httpget, context);

        System.out.println(getResponse.toString());

        System.out.print((postResponse.getEntity().getContent()));
        client.getConnectionManager().shutdown();


    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
4

1 に答える 1

2

ログイン ページの HTTP 要求を作成し、結果の HTML を HTTP 応答ストリームで解析し、そこから使用するトークン値を取得する必要があります。jsoupのようなライブラリを使用して HTML を解析することをお勧めします。

于 2012-07-16T21:33:00.357 に答える