Android: пост Http с параметрами не работает - PullRequest
10 голосов
/ 11 мая 2011

Мне нужно создать запрос HTTP POST с параметрами. Я знаю, что есть много примеров, я пытался использовать HTTPparams, NameValuePair и т. Д., Но, похоже, не могу получить правильный формат для сервера.

Server Type: REST based API utilizing JSON for data transfer<br> Content-type: application/json<br> Accept: application/json<br> Content-length: 47<br> {"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);  

Я пытался отладить, но не вижу, правильно ли присоединен объект или нет ... Что я делаю не так?

Заранее спасибо. Маац

Ответы [ 4 ]

15 голосов
/ 11 мая 2011

Попробуйте это:

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);  
1 голос
/ 12 апреля 2012

это, вероятно, будет работать для вас.

при условии, что у вас уже есть объект json.

ПРИМЕЧАНИЕ: (1) на сервере вам нужно обработать запрос как 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");
1 голос
/ 11 мая 2011
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.

1 голос
/ 11 мая 2011

Из вашего описания я не совсем уверен, но может показаться, что ваш сервер ожидает объект содержимого JSON вместо данных, закодированных в URL. Отправьте что-то вроде этого как body вашего сообщения:

{"username":"abcd","password":"1234"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...