2010-11-20 8 views
8

Grüße,Android: Get Antwort von einer HTTPS-URL

ich ein Android-App bin entwickeln und benötigen eine URL zu öffnen (mit POST-Parametern) über https und die Antwort zu bekommen.

Es gibt die zusätzliche Komplikation, dass ich ein selbstsigniertes Zertifikat habe. Ich muss auch Cookies akzeptieren.

Haben Sie irgendwelche Ideen, wo Sie anfangen sollen?

Vielen Dank im Voraus,

Antwort

3

Ich schaffte es asynchron mit beiden Cookies arbeiten zu erhalten und nicht signierte https.

verwendete ich den Code hier:

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

und für nicht signierte https geändert hier mit Brian Yarger Code:

Self-signed SSL acceptance on Android

(Fügen Sie den obigen Code zu Beginn des Laufes () in HttpConnection.java)

Um die Cookies zu arbeiten, musste ich etwas Code ändern (P OST-Schnipsel aus 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; 

Vielen Dank an alle für den Hinweis mich in die Richtung,

17

Android kommt mit den Apache Commons http Bibliothek enthalten. eine https Post-Anforderung Einrichten ist ganz einfach:

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 verwendet eine Version 4.x der commons http Bibliothek als alle Versionen unter 4.0 ihres Lebenszyklus sind.

Ich kann nicht genau sagen, wie ein selbst signiertes Zertifikat an das Httpclient zu registrieren, aber mybe die commons http Dokumentation hilft:

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

+0

Hallo, Vielen Dank für Ihre Antwort. Es funktioniert gut. Wir können jedoch keine unsignierten Zertifikate erhalten. Auch irgendwelche Ideen darüber, wie ich Ihren Code asynchron arbeiten lassen könnte? Ich möchte nicht, dass die Benutzeroberfläche während des Wartens auf Antworten hängt. – Eamorr

+1

Wie David sagte, müssen Sie einen neuen Thread starten und die HTTP-Post-Aktion in die run-Methode einfügen. Daten können zwischen Threads ausgetauscht werden, indem das Androids-Handler-System verwendet wird. Vielleicht möchten Sie einen Blick auf die Android Grundlagen-Seite werfen: http://developer.android.com/guide/topics/fundamentals.html#threads – marcus