1

メールアドレスとパスワードを持つWebサービスにPOSTリクエストを送信しようとしています。パラメータ(つまりqadir.suh@gmail.com)に特殊文字@を追加すると、%40に変換されます。サーバー側を確認しましたが、@ではなく%40を取得しています。

これが私のコードです:

    HttpClient httpclient = new DefaultHttpClient();
                            HttpPost httppost = new HttpPost(
                                    "http://www.myurl.com/requesthandler.ashx");
                            // from list to arraylist
                            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                                    3);
                            nameValuePairs.add(new BasicNameValuePair("txtUserId",
                                    "qadir.suh@gmail.com"));
                            nameValuePairs.add(new BasicNameValuePair("txtPassword",
                                    "blahblah"));
                            nameValuePairs.add(new BasicNameValuePair("type", "login"));
try {
                        httppost.setEntity(new UrlEncodedFormEntity(
                                nameValuePairs));

                    } catch (UnsupportedEncodingException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                    // Execute HTTP Post Request
                    HttpResponse response = null;
                    try {
                        response = httpclient.execute(httppost);
                    } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        Log.i("Client Protocol Excption", e + "");
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        Log.i("IO Exception", e + "");
                    }
                    String responseText = null;
                    try {
                        responseText = EntityUtils.toString(response
                                .getEntity());
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        Log.i("Parse Exception", e + "");

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        Log.i("IO Exception 2", e + "");

                    }
                    String afterDecode = null;

                    try {
                        afterDecode = URLDecoder.decode(responseText, "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    Toast.makeText(MainActivity.this, afterDecode,
                            Toast.LENGTH_LONG).show();

そんなこと知ってる

httppost.setEntity(new UrlEncodedFormEntity(
                            nameValuePairs));

これは、URLをUTF-8でエンコードします。では、サーバーが%40ではなく@記号を受け取るように、どうすれば目標を達成できますか?または、使用せずにリクエストをPOSTする方法はありますsetEntity(new UrlEncodedFormEntity(nameValuePairs))か?または、デコードされたバージョンのPOSTリクエストを送信できるようにする方法はありますか?

4

1 に答える 1

0

URLエンコードされたフォームパラメータを投稿していますが、コンテンツタイプを「x-www-form-urlencoded」に設定していない可能性があります。これは、サーバーが投稿されたパラメーターを解釈する方法を知るために必要です。呼び出す前にこの行を追加してみてくださいhttppost.setEntity()

httppost.addHeader("Content-Type","application/x-www-form-urlencoded");

編集:URLエンコードを使用したくない場合は、文字列を投稿するだけです。

POST本文をURLエンコードしたくない場合は、代わりに次のようにすることができます。

// Create post body as name/value pairs in form format
String postBody = "txtUserId=qadir.suh@gmail.com&txtPassword=blahblah&type=login";
try {
    httppost.setEntity(new StringEntity(postBody));
}
于 2012-11-13T10:51:55.593 に答える