Android: сообщение Http с неработающими параметрами
Мне нужно создать HTTP POST-запрос с параметрами. Я знаю, что есть много примеров, я пытался использовать HTTPparams, NameValuePair и т.д., Но, похоже, не получил правильный формат для сервера.
Server Type: REST based API utilizing JSON for data transfer
Content-type: application/json
Accept: application/json
Content-length: 47
{"username":"abcd","password":"1234"}
Я могу передать эти заголовки, но я не могу передать эти параметры "имя пользователя", "пароль". Вот мой код:
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login");
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("username","abcd"));
pairs.add(new BasicNameValuePair("password","1234"));
post.setHeader("Content-type", "application/json");
post.setHeader("Accept", "application/json");
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,"UTF-8");
post.setEntity(entity);
HttpResponse response = client.execute(post);
Я попытался отлаживать, но не могу видеть, правильно ли привязана сущность или нет... Что я делаю неправильно?
Спасибо в Advance.
Маац
Ответы
Ответ 1
Попробуйте следующее:
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login");
post.setHeader("Content-type", "application/json");
post.setHeader("Accept", "application/json");
JSONObject obj = new JSONObject();
obj.put("username", "abcd");
obj.put("password", "1234");
post.setEntity(new StringEntity(obj.toString(), "UTF-8"));
HttpResponse response = client.execute(post);
Ответ 2
Я не совсем уверен, из вашего описания, но, похоже, ваш сервер ожидает объект контента JSON вместо данных, закодированных в URL-адресе. Отправьте что-то вроде этого как тело вашего сообщения:
{"username":"abcd","password":"1234"}
Ответ 3
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login");
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("username","abcd"));
pairs.add(new BasicNameValuePair("password","1234"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,HTTP.UTF_8);
post.setEntity(entity);
HttpResponse response = client.execute(post);
просто попробуйте это, потому что он отлично подходит для меня, когда я пытаюсь отправить сообщение HTTP.
Ответ 4
это, вероятно, сработает для вас.
если у вас уже есть объект json.
ПРИМЕЧАНИЕ. (1) на сервере вам нужно обрабатывать запрос th как utf-8 (также в БД).
@SuppressWarnings("unchecked")
private static HttpResponse executePostRequest(JSONObject jsonData, String url) {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(url);
try {
httpost.setEntity(new ByteArrayEntity(jsonData.toString().getBytes("UTF8")));
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json;charset=UTF-8");
httpost.setHeader("Accept-Charset", "utf-8");
HttpResponse httpResponse = httpclient.execute(httpost);
return httpResponse;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
то в клиенте обработайте ответ сервера следующим образом:
String responseBody = EntityUtils
.toString(response.getEntity(), "UTF-8");