2012-04-04 2 views
0

Я использую тот же самый код в 2 программах, за исключением хранения данных POST. В первом методе (тот, который работает) я использую NameValuePair, а в другом я использую StringEntity (не работает, но я также не использую какую-либо кодировку). Причина, по которой я не использую кодирование, состоит в том, что она полностью испортила мою строку. Код с StringEntity не будет работать, хотя ... Вот код:Использование StringEntity для отправки запроса POST в Android?

public static String sendNamePostRequest(String urlString, String nameField) { 

    HttpClient client = new DefaultHttpClient(); 

    HttpPost post = new HttpPost(urlString); 

    StringBuffer sb = new StringBuffer(); 

    try { 

     post.setEntity(new StringEntity(
       "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE3NDM5MzMwMzRkZA%3D%3D&__EVENTVALIDATION=%2FwEWBAL%2B%2B4CfBgK52%2BLYCQK1gpH7BAL0w%2FPHAQ%3D%3D&_nameTextBox=John&_zoekButton=Zoek&numberOfLettersField=3")); 

     HttpResponse response = client.execute(post); 
     HttpEntity entity = response.getEntity(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       entity.getContent())); 
     String in = ""; 

     while ((in = br.readLine()) != null) { 
      sb.append(in + "\n"); 
     } 

     br.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return sb.toString(); 
} 

Этот код делает отправить запрос (понюхал с Wireshark, чтобы проверить), но не возвращает соответствующие данные HTML. Любая причина, почему это может быть?

+0

Пробовали ли вы печатать то, что было исходящее URL? Этот код отправит запрос, но если URL-адрес неверен, вы не получите данные HTML, которые вы ожидаете. – androidnoob

+0

URL-адрес правильный. Для этого есть две причины: 1. Я использую тот же самый URL-адрес в обычных Java-приложениях, которые также отправляют запросы POST, и он отлично работает там. 2. Фактически это дает мне данные URL-адреса, только до перед отправкой запроса, а не после ... – ZimZim

ответ

0

Вместо использования:

HttpResponse response = client.execute(post); 
HttpEntity entity = response.getEntity(); 

BufferedReader br = new BufferedReader(new InputStreamReader(
       entity.getContent())); 

Удалить HttpEntity entity = response.getEntity(); и сделать это:

HttpResponse response = client.execute(post); 
BufferedReader br = new BufferedReader(new InputStreamReader(
       response.getEntity().getContent(), "UTF-8")); 

Для пар имя, проверить this link

+0

Не так ли просто кодировать полученные данные с сервера? Моя проблема заключается в том, что мой запрос POST обрабатывается неправильно ... Я все еще получаю данные HTML, это всего лишь данные HTML обычной страницы, а не данные, которые я должен получить после того, как страница/сервер обработал мой запрос ... – ZimZim

+0

I предложит вам снова проверить URL-адрес, потому что Android Java работает немного иначе, чем на складе Java, поэтому ваш код нужно немного подстроить. Если возможно, вставьте URL-адрес, который был подготовлен кодом запаса Java и приведенным выше. Я предполагаю, что способ кодирования POST-запроса Android немного отличается от запаса Java – androidnoob

+0

Сайт http://ed.cupweb6.nl, это голландский школьный сайт, который использует мой младший брат. Но я использовал этот точный метод в другой программе, только там отправленная строка данных была помещена в NameValuePairs, но это не работает здесь ... – ZimZim

Смежные вопросы