2010-11-20 2 views
8

Привет,Android: Получите ответ от HTTPS URL

Я разработки Android приложения и нужно открыть URL (с параметрами POST) по протоколу HTTPS и получить ответ.

Есть дополнительное осложнение, что у меня есть самозаверяющий сертификат. Мне также необходимо принять файлы cookie.

У кого-нибудь есть идеи о том, с чего начать?

Большое спасибо заранее,

ответ

3

мне удалось получить все это работает асинхронном с обеих печеньем и без знака https.

Я использовал код здесь:

http://masl.cis.gvsu.edu/2010/04/05/android-code-sample-asynchronous-http-connections/

и модифицированы для неподписанных протокола HTTPS с использованием кода Брайана Yarger здесь:

Self-signed SSL acceptance on Android

(Добавить код выше в начале пробега () в HttpConnection.java)

Чтобы заставить куки работать, мне пришлось изменить код (P ОСТ фрагмент из HttpConnection.java):

  case POST: 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new StringEntity(data)); 
      httpPost.addHeader("Cookie", Cookie.getCookie()); 
      response = httpClient.execute(httpPost); 

      Header[] headers=response.getAllHeaders(); 
      for(int i=0;i<headers.length;i++){ 
       if(headers[i].getName().equalsIgnoreCase("Set-Cookie")){ 
        //Log.i("i",headers[i].getName()+"---"+headers[i].getValue()); 
        Cookie.setCookie(headers[i].getValue()); 
        break; 
       } 
      } 
      break; 

Большое спасибо всем за указание мне в направлении,

17

Android поставляется с Apache Commons HTTP библиотеки включены. Настройка запроса по протоколу HTTPS пост довольно легко:

HttpPost post = new HttpPost("https://yourdomain.com/yourskript.xyz"); 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
nameValuePairs.add(new BasicNameValuePair("postValue1", "my Value")); 
nameValuePairs.add(new BasicNameValuePair("postValue2", "2nd Value")); 
post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

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

String responseText = EntityUtils.toString(entity); 

Android использует версию 4.x библиотеки Обще HTTP все версии ниже 4.0 находятся вне их жизненного цикла.

Я не могу точно сказать, как зарегистрировать самостоятельно подписанный сертификат на HTTPClient, но Mybe документация Обще HTTP помогает:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506

+0

Привет, Большое спасибо за Ваш ответ. Он работает отлично. Невозможно заставить беззнаковые сертификаты работать. Кроме того, любые идеи о том, как я могу заставить ваш код работать асинхронно? Я не хочу, чтобы пользовательский интерфейс висел в ожидании ответов. – Eamorr

+1

Как сказал Дэвид, вам нужно начать новый поток и поместить действие http post в метод run. Данные можно обменивать между потоками, используя систему обработчиков Androids. Возможно, вам стоит взглянуть на основную страницу Android: http://developer.android.com/guide/topics/fundamentals.html#threads – marcus

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