0

POSTデータの保存を除いて、2つのプログラムでまったく同じコードを使用しています。最初のメソッド(機能するメソッド)ではNameValuePairを使用し、もう1つのメソッドではStringEntityを使用します(機能しませんが、エンコードも使用しません)。エンコーディングを使用しない理由は、文字列を完全に台無しにするためです。ただし、StringEntityを含むコードは機能しません...コードは次のとおりです。

public static String sendNamePostRequest(String urlString, String nameField) {

    HttpClient client = new DefaultHttpClient();

    HttpPost post = new HttpPost(urlString);

    StringBuffer sb = new StringBuffer();

    try {

        post.setEntity(new StringEntity(
                "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE3NDM5MzMwMzRkZA%3D%3D&__EVENTVALIDATION=%2FwEWBAL%2B%2B4CfBgK52%2BLYCQK1gpH7BAL0w%2FPHAQ%3D%3D&_nameTextBox=John&_zoekButton=Zoek&numberOfLettersField=3"));

        HttpResponse response = client.execute(post);
        HttpEntity entity = response.getEntity();

        BufferedReader br = new BufferedReader(new InputStreamReader(
                entity.getContent()));
        String in = "";

        while ((in = br.readLine()) != null) {
            sb.append(in + "\n");
        }

        br.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

    return sb.toString();
}

このコードはリクエストを送信しますが(wiresharkでスニッフィングしてチェックします)、適切なHTMLデータを返しません。これがなぜかもしれない理由は何ですか?

4

1 に答える 1

0

使用する代わりに:

HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();

BufferedReader br = new BufferedReader(new InputStreamReader(
                entity.getContent()));

削除HttpEntity entity = response.getEntity();して次のようにします。

HttpResponse response = client.execute(post);
BufferedReader br = new BufferedReader(new InputStreamReader(
                response.getEntity().getContent(), "UTF-8"));

NameValuePair については、このリンクを確認してください

于 2012-04-04T23:55:08.087 に答える