メールアドレスとパスワードを持つ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リクエストを送信できるようにする方法はありますか?