I mis en place Fiddler2 pour émulateur Android, cela fonctionne, je peux voir le trafic HTTPS via le navigateur Android, mais je ne peux pas se connecter au serveur HTTPS avec mon code à l'aide HttpsURLConnection:Android HttpURLConnection avec Fiddler: IOException: socket est fermée
// use Fiddler's proxy:
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("172.16.4.20", 8888));
HttpsURLConnection connection = (HttpsURLConnection) new URL(url)
.openConnection(proxy);
connection.setRequestMethod(method);
connection.setRequestProperty("Content-Type", contentType);
connection.setDoInput(true);
connection.setDoOutput(true);
OutputStream out = connection.getOutputStream();
Je suis:
java.net.SocketException: Socket is closed
en Fiddler je peux voir la première demande (j'ai enlevé l'adresse hôte)
CONNECT [address]:443 HTTP/1.1
Host: [address]
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.0.4; Android SDK built for x86 Build/IMM76D)
Connection: Keep-Alive
After the client received notice of the established CONNECT, it failed to send any data.
Réponse:
HTTP/1.1 200 Connection Established
FiddlerGateway: Direct
StartTime: 12:32:18.567
Connection: close
La paire de réponse à la demande ci-dessus est comme tout autre établissement de la connexion HTTPS du navigateur Android. Après cela, je ne peux pas envoyer ma demande POST (parce que j'ai reçu l'exception SocketException). Sans proxy cela fonctionne.
Oui, j'ai ajouté FiddlerRoot.cer et je fais confiance dans tous les certificats. Comme je l'ai dit dans le navigateur Android tout va bien avec les sites HTTPS, et je peux voir le trafic de Fiddler. –
Cela suggère que les applications n'héritent pas de l'approbation de certificat du navigateur. Avez-vous attaché un gestionnaire d'événement à votre HttpsURLConnection pour accepter le certificat auto-signé de Fiddler? – EricLaw
Je suis tombé sur le même problème. J'ai installé FiddlerRoot.cer sur mon appareil, comme Attila a déclaré que je peux renifler le trafic https à partir du navigateur Android et Chrome. Que voulez-vous dire "attaché un gestionnaire d'événements à votre HttpsURLConnection pour accepter le certificat auto-signé de Fillder"? J'ai implémenté un TrustManager factice qui ne fait rien et l'utilise comme une partie de SSLSocketFactory. Mais ça ne marche pas. Je reçois toujours SocketException disant "socket est fermé" –