Juin 2007
- Introduction
- Exemple: Récupérer un flux public
- tcpdump
- WireShark
- Problème: SSL et chiffrement
- Fiddler
- Conclusion
Introduction
Le développement d'applications qui interagissent avec des services Web pose un ensemble unique de problèmes. Une source fréquente de frustration est de ne pas savoir exactement quel message a été envoyé au serveur, ni quelle réponse a été reçue. Certains des bugs les plus difficiles à trouver sont causés par une déconnexion entre ce que nous pensons envoyer au serveur et ce qui se passe réellement sur le réseau.
Cet article présente plusieurs outils qui peuvent améliorer la visibilité et l'utilité des données sur le réseau. Communément appelés "sniffers de paquets", ces outils capturent tous les paquets réseau qui se déplacent sur l'interface réseau. L'examen du contenu de ces paquets et de leur ordre d'envoi et de réception peut être une technique de débogage utile.
Exemple: Récupérer un flux public
Je prépare une équipe de cyclistes lors d'une balade en charité. J'ai créé un agenda pour des événements tels que des séances d'information, des collectes de fonds et des séances d'entraînement. J'ai rendu cet agenda public afin que les membres de l'équipe et les autres personnes puissent le consulter et participer aux événements. Je souhaite également envoyer une newsletter concernant les événements à venir. Par conséquent, plutôt que de copier les informations du site Web de Google Agenda, je peux utiliser l'API de données Google Agenda pour interroger cet agenda et récupérer les événements.
La documentation de l'API Google Agenda explique comment utiliser l'API Google Data RESTful pour interagir avec mon agenda par programmation. (Note de l'éditeur:à compter de la version 3, l'API Google Agenda n'utilise plus le format de données Google.) La première chose à faire est d'obtenir l'URL du flux d'événements de l'agenda en cliquant sur le bouton sur la page des paramètres de l'agenda:
http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic
En utilisant la documentation Google Agenda comme référence, je peux récupérer et afficher des événements d'agenda comme celui-ci, où PUBLIC_FEED_URL
contient l'URL du flux d'événements.
CalendarService myService = new CalendarService("exampleCo-fiddlerExample-1"); final String PUBLIC_FEED_URL = "http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic"; URL feedUrl = new URL(PUBLIC_FEED_URL); CalendarEventFeed resultFeed = myService.getFeed(feedUrl, CalendarEventFeed.class); System.out.println("All events on your calendar:"); for (int i = 0; i < resultFeed.getEntries().size(); i++) { CalendarEventEntry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); } System.out.println();
La liste des événements de mon agenda s'affiche:
All events on your calendar: MS150 Training ride Meeting with Nicole MS150 Information session
L'extrait de code ci-dessus affiche le titre des événements de l'agenda, mais qu'en est-il des autres données que nous avons reçues du serveur ? La bibliothèque cliente Java ne simplifie pas l'extraction d'un flux ou d'une entrée au format XML. Même dans ce cas, le contenu XML n'est pas la solution complète. Qu'en est-il des en-têtes HTTP qui accompagnent la requête ? La requête a-t-elle été envoyée par proxy ou redirigée ? Avec des opérations plus complexes, ces questions prennent une importance croissante, en particulier en cas de problème et d'erreurs. Les logiciels de détection de paquets peuvent répondre à ces questions en révélant le trafic réseau.
tcpdump
tcpdump est un outil de ligne de commande qui fonctionne sur les plates-formes de type Unix, mais il existe également un port Windows appelé WinDump. Comme la plupart des sniffers de paquets, tcpdump passe votre carte réseau en mode promiscuité, ce qui nécessite des droits de super-utilisateur. Pour utiliser tcpdump, il vous suffit de spécifier l'interface réseau à écouter. Le trafic réseau sera alors envoyé à stdout:
sudo tcpdump -i eth0
Si vous exécutez cette commande, vous serez bombardé de toutes sortes de trafic réseau, dont certains ne vous reconnaîtront pas. Vous pouvez simplement transférer la sortie dans un fichier et grep ultérieurement, mais cela peut entraîner la création de fichiers très volumineux. La plupart des logiciels de capture de paquets intègrent des mécanismes de filtrage qui ne capturent que ce dont vous avez besoin.
tcpdump est compatible avec le filtrage basé sur différentes caractéristiques du trafic réseau. Par exemple, vous pouvez indiquer à tcpdump de ne capturer que le trafic vers et depuis votre serveur sur le port 80 (messages HTTP), en insérant le nom d'hôte de votre serveur dans l'expression suivante:
dst or src host <hostname> and port 80
Pour chaque paquet correspondant à l'expression du filtre, tcpdump affiche un horodatage, la source et la destination du paquet, ainsi que plusieurs indicateurs TCP. Ces informations peuvent être utiles, car elles indiquent l'ordre dans lequel les paquets ont été envoyés et reçus.
Il est souvent utile de consulter également le contenu des paquets. L'option "-A" indique à tcpdump d'imprimer chaque paquet en caractères ASCII, en exposant les en-têtes HTTP et le corps du message. L'indicateur "-s" permet de spécifier le nombre d'octets à afficher (où "-s 0" signifie que le corps du message ne doit pas être tronqué).
En regroupant tous ces éléments, nous obtenons la commande suivante:
sudo tcpdump -A -s 0 -i eth0 dst or src host <hostname> and port 80
Si vous exécutez cette commande, puis l'exemple court .Java ci-dessus, vous verrez toutes les communications réseau impliquées dans cette opération. Parmi les requêtes de trafic, vous trouverez la requête HTTP GET
:
22:22:30.870771 IP dellalicious.mshome.net.4520 > po-in-f99.google.com.80: P 1:360(359) ack 1 win 65535 E.....@....\...eH..c...P.=.....zP......GET /calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic HTTP/1.1 User-Agent: exampleCo-fiddlerExample-1 GCalendar-Java/1.0.6 GData-Java/1.0.10(gzip) Accept-Encoding: gzip Cache-Control: no-cache Pragma: no-cache Host: www.google.com Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive
Le message de réponse 200 OK
contenant le flux de données Google s'affiche également. Notez que le flux est divisé en quatre paquets:
22:22:31.148789 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1:1431(1430) ack 360 win 6432 E...1 ..2.I.H..c...e.P.....z.=.:P..M...HTTP/1.1 200 OK Content-Type: application/atom+xml; charset=UTF-8 Cache-Control: max-age=0, must-revalidate, private Last-Modified: Mon, 11 Jun 2007 15:11:40 GMT Transfer-Encoding: chunked Date: Sun, 24 Jun 2007 02:22:10 GMT Server: GFE/1.3 13da <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gCal='http://sc hemas.google.com/gCal/2005' xmlns:gd='http://schemas.google.com/g/2005'><id>http ://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo gle.com/public/basic</id><updated>2007-06-11T15:11:40.000Z</updated><category sc heme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2 005#event'></category><title type='text'>MS150 Training Schedule</title><subtitl e type='text'>This calendar is public</subtitle><link rel='http://schemas.google .com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/calend ar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic'></ link><link rel='self' type='application/atom+xml' href='http://www.google.com/ca lendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic ?max-results=25'></link><author><name>Lane LiaBraaten</name><email>api.lliabraa@ gmail.com</email></author><generator version='1.0' uri='http://www.google.com/ca lendar'>Google Calendar</generator><openSearch:totalRe 22:22:31.151501 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1431:2861(1430) ack 360 win 6432 E...1!..2.I.H..c...e.P.......=.:P.. 2...sults>3</openSearch:totalResults><openSe arch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch :itemsPerPage><gd:where valueString=''></gd:where><gCal:timezone value='America/ Los_Angeles'></gCal:timezone><entry><id>http://www.google.com/calendar/feeds/24v j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j 740hnj46744</id><published>2007-06-11T15:11:05.000Z</published><updated>2007-06- 11T15:11:05.000Z</updated><category scheme='http://schemas.google.com/g/2005#kin d' term='http://schemas.google.com/g/2005#event'></category><title type='text'>M S150 Training ride</title><summary type='html'>When: Sat Jun 9, 2007 7am to 10am &nbsp; PDT<br> <br>Event Status: confirmed</summary><conte nt type='text'>When: Sat Jun 9, 2007 7am to 10am&nbsp; PDT<br> <b r>Event Status: confirmed</content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/event?eid=ZGd0NDAwMjJjdWkyazNqNzQwaG5qNDY3 NDQgMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw' title='alternate'></link><link rel=' self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/24v j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j 740hnj46744'></link><author><name>MS150 Training Schedule</name></author><gCal:s endEventNotifications value='false'></gCal:sendEventNotifications></entry><entry ><id>http://www.google.com/cal 22:22:31.153097 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 2861:4291(1430) ack 360 win 6432 E...1#..2.I.H..c...e.P.......=.:P.. ....endar/feeds/24vj3m5pl125bh2ijbbneh953s%4 0group.calendar.google.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8</id><publishe d>2007-06-11T15:08:23.000Z</published><updated>2007-06-11T15:10:39.000Z</updated ><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.g oogle.com/g/2005#event'></category><title type='text'>Meeting with Nicole</title ><summary type='html'>When: Mon Jun 4, 2007 10am to 11am&nbsp; PDT<br> <br>Where: Conference Room B <br>Event Status: confirmed</summ ary><content type='text'>When: Mon Jun 4, 2007 10am to 11am&nbsp; PDT<br& gt; <br>Where: Conference Room B <br>Event Status: confirmed <br>Event Description: Discuss building cycling team for MS150</content><l ink rel='alternate' type='text/html' href='http://www.google.com/calendar/event? eid=NTFkOGtoNHMzYnBscW5iZjFscDZwMGtqcDggMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw' title='alternate'></link><link rel='self' type='application/atom+xml' href='http ://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo gle.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8'></link><author><name>MS150 Trai ning Schedule</name></author><gCal:sendEventNotifications value='false'></gCal:s endEventNotifications></entry><entry><id>http://www.google.com/calendar/feeds/24 vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/va41amq3r08dhh kpm3lc1abs2o</id><published>20 22:22:31.190244 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: P 4291:5346(1055) ack 360 win 6432 E..G1$..2.K.H..c...e.P.....<.=.:P.. ....07-06-11T15:10:08.000Z</published><updat ed>2007-06-11T15:10:08.000Z</updated><category scheme='http://schemas.google.com /g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title ty pe='text'>MS150 Information session</title><summary type='html'>When: Wed Jun 6, 2007 4pm to Wed Jun 6, 2007 5pm&nbsp; PDT<br> <br>Event Statu s: confirmed</summary><content type='text'>When: Wed Jun 6, 2007 4pm to Wed Jun 6, 2007 5pm&nbsp; PDT<br> <br>Event Status: confirmed< /content><link rel='alternate' type='text/html' href='http://www.google.com/cale ndar/event?eid=dmE0MWFtcTNyMDhkaGhrcG0zbGMxYWJzMm8gMjR2ajNtNXBsMTI1YmgyaWpiYm5la Dk1M3NAZw' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.c alendar.google.com/public/basic/va41amq3r08dhhkpm3lc1abs2o'></link><author><name >MS150 Training Schedule</name></author><gCal:sendEventNotifications value='fals e'></gCal:sendEventNotifications></entry></feed>
Ce résultat inclut tous les en-têtes et le contenu HTTP, ainsi que plusieurs indicateurs TCP chiffrés. Toutes les données sont présentes, mais elles sont difficiles à lire et à comprendre. Plusieurs outils graphiques facilitent l'affichage de ces données.
WireShark (anciennement Ethereal)
![Capture d'écran de Wireshark](https://developers.google.cn/static/gdata/articles/support/otw/wireshark2.png?authuser=8&hl=fr)
WireShark affiche le trafic réseau de différentes manières.
WireShark est un outil graphique conçu avec libpcap, la même bibliothèque sur laquelle tcpdump est disponible, disponible sous Linux, Mac OS X et Windows. L'IUG de WireShark offre plusieurs nouvelles façons d'interpréter les données de capture de paquets et d'interagir avec elles. Par exemple, lorsque des paquets sont capturés depuis votre interface réseau, ils sont affichés dans différentes couleurs en fonction du protocole qu'ils utilisent. Vous pouvez également trier le trafic par horodatage, source, destination et protocole.
Si vous sélectionnez une ligne dans la liste des paquets, Wireshark affichera des informations d'adresse IP, de TCP et d'autres protocoles spécifiques dans les en-têtes de paquet dans une arborescence lisible. Les données sont également affichées au format HEX et ASCII en bas de l'écran.
Bien que l'aspect visuel de WireShark facilite la compréhension du trafic réseau, vous aurez tout de même besoin de filtrer le trafic réseau dans la plupart des cas. WireShark offre de puissantes fonctionnalités de filtrage, dont la compatibilité avec des centaines de protocoles.
CONSEIL:Pour afficher les protocoles disponibles et créer des filtres complexes, cliquez sur le bouton en haut de la fenêtre WireShark.
Pour recréer le filtre utilisé dans l'exemple tcpdump ci-dessus, vous pouvez insérer l'expression suivante dans la zone de filtre WireShark:
ip.addr==<your IP address> && tcp.port==80
Ou tirez parti des connaissances de WireShark sur le HTTP:
ip.addr==<your IP address> && http
Les résultats de votre capture ne seront filtrés que sur les paquets impliqués dans cette interaction avec le serveur Google Agenda. Vous pouvez cliquer sur chaque paquet pour en afficher le contenu et regrouper la transaction.
CONSEIL : Vous pouvez faire un clic droit sur l'un des paquets et choisir "Suivre le flux TCP" pour afficher les requêtes et les réponses de manière séquentielle dans une seule fenêtre.
WireShark propose plusieurs façons d'enregistrer les informations de capture. Vous pouvez enregistrer un, plusieurs ou tous les paquets. Si vous consultez un flux TCP, cliquez simplement sur le bouton "Enregistrer sous" pour n'enregistrer que les paquets correspondants. Vous pouvez également importer la sortie d'une capture tcpdump et l'afficher dans WireShark.
Problème: SSL et chiffrement
L'un des inconvénients courants des outils de capture de paquets est l'impossibilité de consulter les données chiffrées via une connexion SSL. Comme l'exemple ci-dessus accède à un flux public, SSL n'est pas nécessaire. Toutefois, si l'exemple a accédé à un flux privé, le client doit s'authentifier auprès du service d'authentification de Google, qui nécessite une connexion SSL.
L'extrait suivant est semblable à l'exemple précédent, mais dans cet exemple, CalendarService
demande le métaflux d'agenda de l'utilisateur, qui est un flux privé nécessitant une authentification. Pour vous authentifier, appelez simplement la méthode setUserCredentials
. Cette méthode déclenche une requête HTTPS vers le service ClientLogin et extrait le jeton d'authentification de la réponse. L'objet CalendarService
inclura alors le jeton d'authentification dans toutes les requêtes ultérieures.
CalendarService myService = new CalendarService("exampleCo-fiddlerSslExample-1"); myService.setUserCredentials(username, userPassword); final String METAFEED_URL = "http://www.google.com/calendar/feeds/default"; URL feedUrl = new URL(METAFEED_URL); CalendarFeed resultFeed = myService.getFeed(feedUrl, CalendarFeed.class); System.out.println("Your calendars:"); for (int i = 0; i < resultFeed.getEntries().size(); i++) { CalendarEntry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); } System.out.println();
Tenez compte du trafic réseau requis pour s'authentifier et accéder à un flux d'API Google Data privé:
- Envoyer les identifiants utilisateur au service ClientLogin
- Envoyez un attribut HTTP
POST
à https://www.google.com/accounts/ClientLogin en incluant les paramètres suivants dans le corps du message :- Email (E-mail) : adresse e-mail de l'utilisateur.
- Passwd : mot de passe de l'utilisateur.
- source : identifie votre application cliente. Doit être au format companyName-applicationName-versionID. Les exemples utilisent le nom ExampleCo-FiddlerSSLExample-1.
- service : le nom du service Google Agenda est "cl".
- Envoyez un attribut HTTP
- Recevoir le jeton d'autorisation
- Si la requête d'authentification échoue, vous recevrez un code d'état HTTP 403 "Interdit".
- Si la requête aboutit, le service affiche un code d'état HTTP 200 OK, suivi de trois longs codes alphanumériques dans le corps de la réponse:
SID
,LSID
etAuth
. La valeurAuth
correspond au jeton d'autorisation.
- Demander le métaflux d'un agenda privé
- Envoyez un
GET
HTTP à http://www.google.com/calendar/feeds/default avec l'en-tête suivant:
Authorization: GoogleLogin auth=<yourAuthToken>
- Envoyez un
Essayez d'exécuter cet extrait et d'afficher le trafic réseau dans WireShark (en utilisant "http || ssl" comme filtre). Vous verrez les paquets SSL et TLS impliqués dans la transaction, mais les paquets de requête et de réponse ClientLogin sont chiffrés dans les paquets "Application Data". Ne vous inquiétez pas. Nous allons ensuite examiner un outil capable de révéler ces informations chiffrées.
Fiddler
Fiddler est un autre outil de détection de paquets graphique. Toutefois, il se comporte assez différemment des outils présentés jusqu'à présent. Fiddler joue le rôle de proxy entre votre application et les services distants avec lesquels vous interagissez, devenant ainsi un homme du milieu. Fiddler établit la connexion SSL avec votre application et le service Web distant, en déchiffrant le trafic à partir d'un point de terminaison, en capturant le texte brut et en rechiffrant le trafic avant de l'envoyer. Malheureusement, Fiddler n'est disponible que pour Windows, pour tous les utilisateurs de Mac et de Linux.
Remarque : La compatibilité avec le protocole SSL nécessite Fiddler version 2 et .NET Framework version 2.0.
L'affichage du trafic réseau dans Fiddler s'effectue principalement via l'onglet "Inspecteur de session". Les sous-onglets les plus utiles pour résoudre les problèmes liés aux API Google Data sont les suivants:
- Headers : affiche les en-têtes HTTP dans une arborescence réductible.
- Auth : affiche les en-têtes d'authentification.
- Format brut : affiche le contenu des paquets réseau au format ASCII.
CONSEIL : Cliquez sur l'icône dans l'angle inférieur gauche de la fenêtre de Fiddler pour activer ou désactiver la capture.
Fiddler utilise le framework .NET pour configurer les connexions réseau et utiliser Fiddler en tant que proxy. Cela signifie que toutes les connexions que vous établissez avec Internet Explorer ou avec le code .NET apparaissent par défaut dans Fiddler. Toutefois, le trafic provenant de l'exemple Java ci-dessus ne s'affichera pas, car Java dispose d'une autre méthode de configuration des proxys HTTP.
En Java, vous pouvez définir le proxy HTTP à l'aide des propriétés système. Fiddler s'exécute sur le port 8888. Pour une installation locale, vous pouvez donc faire en sorte que le code Java utilise Fiddler comme proxy pour HTTP et HTTPS en ajoutant les lignes suivantes:
System.setProperty("http.proxyHost", "localhost"); System.setProperty("http.proxyPort", "8888"); System.setProperty("https.proxyHost", "localhost"); System.setProperty("https.proxyPort", "8888");
Si vous exécutez l'exemple avec ces lignes, le package de sécurité Java va vous renvoyer une trace de la pile horrible:
[java] Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
![Capture d'écran de Fiddler](https://developers.google.cn/static/gdata/articles/support/otw/fiddler.png?authuser=8&hl=fr)
Fiddler peut déchiffrer et afficher le trafic SSL.
Cette erreur se produit lorsque le certificat renvoyé par le serveur dans une connexion SSL ne peut pas être validé. Dans ce cas, le mauvais certificat provient de Fiddler, qui agit comme un homme du milieu. Fiddler génère des certificats à la volée. Étant donné qu'il ne s'agit pas d'un émetteur de confiance, ces certificats empêchent Java de configurer la connexion SSL.
Remarque : Lorsque Fiddler est en cours d'exécution, chaque connexion SSL que vous établissez dans Internet Explorer déclenche une "alerte de sécurité" vous demandant si vous souhaitez poursuivre bien que le certificat douteux s'affiche. Vous pouvez cliquer sur "Afficher le certificat" pour afficher le certificat généré par Fiddler.
Comment contourner cette exception de sécurité ? En bref, vous devez reconfigurer le framework de sécurité de Java pour approuver tous les certificats. Heureusement, vous n'avez pas à réinventer la roue en consultant la solution de Francis Labrie et en ajoutant la méthode SSLUtilities.trustAllHttpsCertificates()
à l'exemple ci-dessus.
Une fois que vous avez configuré Java pour utiliser Fiddler en tant que proxy et désactivé la validation des certificats par défaut, vous pouvez exécuter l'exemple et afficher tout le trafic envoyé sur le réseau en texte brut. Ne volez pas mon mot de passe !
N'oubliez pas qu'il ne s'agit que d'un petit exemple de trafic SSL. Certaines applications Web utilisent exclusivement des connexions SSL. Il n'est donc pas nécessaire de déboguer le trafic HTTP sans déchiffrer les données.
Conclusion
tcpdump est disponible sur Linux, Mac OS X et Windows. Il s'agit d'un outil formidable lorsque vous savez ce que vous recherchez et avez besoin d'une capture rapide. Cependant, certains outils graphiques présentent le trafic réseau dans des formats plus faciles à comprendre. tcpdump propose beaucoup plus d'options et de fonctionnalités de filtrage que celles abordées ici. Pour obtenir une description complète des fonctionnalités de tcpdump, saisissez "man tcpdump" ou accédez à la page de manuel tcpdump en ligne.
WireShark est également disponible sous Linux, Mac OS X et Windows. Grâce à la compatibilité intégrée avec des centaines de protocoles, WireShark est un outil utile pour de nombreuses applications, et pas seulement pour le débogage HTTP. Cette introduction ne fait qu'aborder les nombreuses fonctionnalités de WireShark. Pour en savoir plus, saisissez "man fils de discussion" ou consultez le site Web de WireShark.
Fiddler offre de nombreuses fonctionnalités intéressantes, mais il se distingue par sa capacité à déchiffrer le trafic SSL. Pour en savoir plus, consultez le site Web de Fiddler2.
Ces outils de détection de paquets sont d'excellents outils à avoir à votre disposition, et les lecteurs observateurs auront remarqué qu'ils sont tous sans frais ! La prochaine fois que vous travaillerez avec les API Google et que vous verrez quelque chose d'inapproprié, retirez l'un de ces analyseurs de réseau pour voir de plus près ce qui se passe. Si vous n'arrivez pas à identifier le problème, vous pouvez toujours poser une question dans le groupe de discussion. En incluant les messages pertinents du réseau, vous aidez les autres utilisateurs à comprendre et à diagnostiquer votre problème.
Bonne chance et bonne haleine !