web-dev-qa-db-fra.com

Comment puis-je tracer la demande HttpClient en utilisant fiddler ou tout autre outil?

J'utilise HttpClient pour envoyer une demande à l'un des services d'API Web auquel je n'ai pas accès et j'ai besoin de suivre le flux de demande réel qui arrive au serveur depuis mon client. Existe-t-il un moyen de connecter le violoniste pour écouter les demandes?

J'utilise la classe System.Net.Http.HttpClient pour envoyer la demande.

Mise à jour: essayer d'améliorer cette question maintenant car je n'ai pas pu obtenir ce que je cherchais. J'utilise une application cliente .Net pour me connecter à un service Web hébergé sur mon propre IIS sur le canal HTTP. J'ai fait le débogage du violoneur plus tôt avec un site Web hébergé sur mon IIS et regarder le trafic généré entre mon navigateur et le site Web. Mais quand il s'agit de regarder le trafic généré par un programme client .Net parlant au service Web en utilisant la classe HttpClient, étrangement le violoneux ne semble pas être capable pour exploiter ce trafic et n'affiche rien. Est-ce que .Net HttpClient contourne l'API WinInet pour se connecter au service, ce qui empêche le violoneux de surveiller le trafic?

37
dhruvin

De manière générale, il suffit de démarrer Fiddler avant votre application. Vous n'avez pas expliqué ce que vous avez essayé jusqu'à présent.

23
EricLaw

Si vous vous connectez avec une URL comme http: // localhost: 1234 changez-la en http: //localhost.fiddler: 1234 / et les requêtes de HttpClient devraient alors devenir visible dans Fiddler.

41
Samuel Jack

IIS n'utilise pas le paramètre proxy dans Internet Option car il s'exécute sous une identité d'utilisateur différente (la valeur par défaut est ApplicationPoolIdentity). @EricLaw a fourni un bon pointeur concernant le problème de capture du trafic d'IIS/ASP.NET.

Au lieu de configurer IIS pour utiliser mon compte de connexion, je modifie web.config pour forcer HTTPClient à utiliser un proxy, comme suit.

<configuration>
  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
      <proxy proxyaddress="http://127.0.0.1:8888"/>
    </defaultProxy>
  </system.net>
</configuration>

Voici le détail d'utilisation de MSDN .

12
Tony

Si l'application .NET s'exécute dans votre compte d'utilisateur actuel, ajoutez le contenu suivant dans la section de configuration:

<configuration>
 <system.net>
  <defaultProxy>
   <proxy bypassonlocal="false" usesystemdefault="true" />
  </defaultProxy>
 </system.net>
</configuration>

Remarque: Important: indépendamment des autres paramètres, .NET contourne toujours le proxy Fiddler pour les URL contenant localhost. Donc, plutôt que d'utiliser localhost, changez votre code pour faire référence au nom de la machine. Par exemple:

Cette URL n'apparaîtra pas dans Fiddler:

http: //localhost/X509SignCodeService/X509SigningService.asmx

Cette URL apparaîtra dans Fiddler:

http: //mymachine/X509SignCodeService/X509SigningService.asmx

4
sharad

Utilisez HttpTracer - une bibliothèque que nous avons construite spécifiquement à cet effet . Vous n'aurez pas besoin de configurer un proxy, c'est aussi simple que de passer une instance du gestionnaire dans HttpClient: new HttpClient(new HttpTracerHandler()). Essayez-le, cela a été inestimable pour nous du côté de Xamarin et à des fins S2S dans ASP.NET.

1
Dylan Berry