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");