Как получить доступ к веб-контенту (POST / GET) в приложении Android? - PullRequest
2 голосов
/ 02 марта 2011

Мое требование очень похоже на этот вопрос .

В основном, у меня будет активность входа в мое приложение для Android, и когда пользователь вводит данные и нажимает кнопку входа, мне приходится заходить на мой сайт, аутентифицировать пользователей, получать результат обратно и направлять пользователя дальше, основываясь на успешном входе в систему или нет.

Вот мои вопросы.

  1. Какие варианты для меня, чтобы реализовать выше в Android? Как я могу POST-данные и получить результаты обратно в моей деятельности?
  2. Если используются WebViews, это можно упростить?

Ответы [ 3 ]

4 голосов
/ 02 марта 2011

Вы можете отправить POST в URI с помощью HttpClient:

URI uri = URI.create("http://whatever.com/thingie");
HttpPost post = new HttpPost(uri);
StringEntity ent = new StringEntity("Here is my data!");
post.setEntity(ent);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);

Все, что вам нужно посмотреть, находится в пакете org.apache.http.client.В Интернете есть множество других примеров, которые могут вам помочь.

1 голос
/ 02 марта 2011

Позвольте мне показать, используя пример кода (пример кода из одного из моих предыдущих ответов здесь на SO):

public CookieStore sendPostData(String url, String user, String pass) {

   // Setup a HTTP client, HttpPost (that contains data you wanna send) and
   // a HttpResponse that gonna catch a response.
   DefaultHttpClient postClient = new DefaultHttpClient();
   HttpPost httpPost = new HttpPost(url);
   HttpResponse response;

   try {   

      // Make a List. Increase the size as you wish.
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

      // Add your form name and a text that belongs to the actual form.
      nameValuePairs.add(new BasicNameValuePair("username_form", user));
      nameValuePairs.add(new BasicNameValuePair("password_form", pass));

      // Set the entity of your HttpPost.
      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute your request against the given url and catch the response.
      response = postClient.execute(httpPost);

      // Status code 200 == successfully posted data.
      if(response.getStatusLine().getStatusCode() == 200) {
         // Green light. Catch your cookies from your HTTP response.
         CookieStore cookies = postClient.getCookieStore(); 
         return cookies;
      }
   } catch (Exception e) {
   }
}  

Теперь вам нужно установить свои куки (или проверить / проверить их) перед выполнением запросов наваш сервер.

Пример кода:

CookieStore cookieStore = sendPostData("www.mypage.com/login", "Username", 
                                            "Password");

// Note, you may get more than one cookie, therefore this list.
List<Cookie> cookie = cookieStore.getCookies();

// Grab the name of your cookie.
String cookieOne = cookie.get(0).getName();

Что вам действительно нужно сделать, это проверить ваш HTTP response с помощью информативного инструмента, такого как Wireshark .Войдите в систему через браузер компьютера и проверьте / найдите правильные значения в своем ответе (в коде Java / Android вы используете String value = cookie.get(0).getValue(); для получения значения).

Вот как вы устанавливаете куки для своего домена:

// Grab the domain of your cookie.
String cookieOneDomain = cookie.get(0).getDomain();

CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance(); 
cookieManager.setAcceptCookie(true);

cookieManager.setCookie(cookieOneDomain, cookieOne);
1 голос
/ 02 марта 2011

HttpClient отлично подходит для этого. DroidFu, библиотека с открытым исходным кодом, имеет фантастический пример того, как эффективно использовать HttpClient. Вы можете найти это здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...