Qualche suggerimento per una connessione https?
Non sono riuscito a trovare nulla purtroppo. :(
Visualizzazione stampabile
Qualche suggerimento per una connessione https?
Non sono riuscito a trovare nulla purtroppo. :(
Vi posto alcuni pezzi di codice nella speranza che possiate avere una panoramica migliore sul mio problema.
Questi sono due metodi della classe che ho creato per gestire la comunicazione http.
Il primo effettua la connessione e fa un invio POST, il secondo riceve i dati e li ritorna in forma di stringa.
La classe l'ho chiamata HttpComm.
Qui invece è la parte di codice dove utilizzo la classe per effettuare il login.codice:public static HttpResponse doPost(String url, Map<String, String> postData) throws ClientProtocolException, IOException {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
if (postData != null && postData.isEmpty() == false) {
List<NameValuePair> dataList = new ArrayList<NameValuePair>(postData.size());
Iterator<String> iKeys = postData.keySet().iterator();
while (iKeys.hasNext()) {
String k = iKeys.next();
String v = postData.get(k);
dataList.add(new BasicNameValuePair(k, v));
}
httpPost.setEntity(new UrlEncodedFormEntity(dataList));
}
return httpClient.execute(httpPost);
}
public static String getResponse(HttpResponse r) throws IOException {
InputStream is = r.getEntity().getContent();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(20);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
String res = "";
res = EntityUtils.toString(r.getEntity());
// res = baf.toByteArray().toString();
return res /*new String(baf.toByteArray())*/;
}
La funzione genera una eccezione nel blocco TRY e l'errore è il seguente:codice:String url = "https://url";
String resp = "";
Map<String, String> accountValues = new HashMap<String, String>();
accountValues.put("username_id", params[0]);
accountValues.put("password_id", params[1]);
try {
HttpResponse r = HttpComm.doPost(url, accountValues);
resp = HttpComm.getResponse(r);
Log.e("RESPONSE_CODE: ", Integer.toString(r.getStatusLine().getStatusCode()));
Log.e("RESPONSE_STRING: ", resp);
}
catch (Exception ex){
Log.e("!!!ERRORE!!!: ", ex.getMessage());
}
"The target server failed to respond".
Sicuro non funzioni?
non va, l'errore che mi da è quello!
Se invece mi collego ad un server prova (quello di anddev.org) in cui c'è una pagina di prova per l'invio http post, va a meraviglia!
Ma una connessione https si gestisce in modo diverso per caso?
Oppure il problema sta nel server che non risponde per colpa sua e non mia?
Se come url metto 'http://www.google.com' come "errore" esce: Content has been consumed.
Sono sempre più confuso!
Probabilmente leggi piu di una volta l'HTTPEntity... Sei sicuro di utilizzare solo una volta .getEntity().getContent()?
Si, il problema dell'errore sul sito di Google era effettivamente la ripetizione di getEntity.
Però il problema sul mio sito target "The target server failed to respond" persiste.
BOH!
Bene, ora sembra andare!
Ho dovuto implementare una piccola funzione trovata su un tutorial in giro per il web che permette di personalizzare il un HttpClient con parametri e impostazioni e soprattutto implementare una SslFactory per le comunicazioni sicure.
Posto il codice, se qualcuno ne avesse bisogno:
Ora il mio problema rimanente sarebbe mantenere la sessione loggata mentre clicco altri link della pagina.
Qualche piccolo consiglio al riguardo?
Devo implementare l'uso dei cookie?
Io ti consiglio di riutilizzare il DefaulHttpClient ottenuto per la prima istanza. In questo modo non devi fartene nulla dei cookies perchè si arrangia totalmente DefaultHttpClient