0

さて、私はこの 1 つのサイトに Http Post リクエストを送信しようとしていたので、送信されたリクエストを Wireshark で盗聴し、このサイトの投稿リクエストからテキスト データを取得しました。これをストック Java アプリケーションで使用したところ、まったく問題なく動作しました。post メソッドを定期的に問題なく使用でき、適切な Web サイトが返されました。次に、Androidでこれをやってみました。post リクエストの実行後に実際の html データを返す代わりに、通常のページの html データをそのまま返します。ポストリクエストを送信します(wiresharkで再度スニッフィングします)が、適切な応答が得られないようです。別のプロジェクトで使用したのとまったく同じ方法を使用して、そのプロジェクトで完全に正常に機能し、それを新しいプロジェクトに貼り付けました。Android に INTERNET ユーザー権限を追加したので、それは何も悪いことではありません。唯一の目に見える違いは、もう一方 (機能したもの) で NameValuePairs を使用したことと、これではエンコードせずに文字列を StringEntity に直接入れていることです (ただし、UTF-8 エンコードを使用すると文字列が台無しになります)。私が言ったように、私はこれとまったく同じテキスト行を通常の Java で使用しましたが、エンコーディングなしで問題なく動作しました。では、何が問題になるのでしょうか?これはコードです:

public static String sendNamePostRequest(String urlString) {

    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();
}

ここで何が悪いのか分かりますか?

4

0 に答える 0