2012-11-29 5 views
1

Je suis en train de réécrire un exemple de code pour accéder à l'API d'un magasin Web de Java en ASP classique. Le code Java fonctionne, il envoie des requêtes et les bons résultats sont renvoyés. Le code ASP fait exactement la même chose mais tout ce qu'il fait est de renvoyer une erreur indiquant qu'il y a un problème avec l'autorisation. J'ai vérifié la chaîne de signature de hmac (sha256, base64) mais ceci donne les mêmes résultats que le code de Java. Alors j'ai décidé de vérifier l'apparence réelle des requêtes HTTP et de les comparer les unes avec les autres. Fiddler semblait être un bon choix, mais pour une raison quelconque, les deux requêtes HTTP n'apparaissent pas.Certaines requêtes HTTP n'apparaissent pas dans Fiddler

Beaucoup a déjà été écrit sur ce sujet et j'ai essayé plusieurs choses, mais jusqu'ici pas de chance. Ils décrivent tous le routage de la requête via le proxy Fiddler, qui est localhost: 8888.

J'utilise cet objet dans le code ASP:

Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") 

Pour IIS 7 (sous Windows 7) le proxy peut être définie dans DOS comme ceci:

netsh winhttp set proxy localhost:8888 

Et dans le code comme ce (cela peut ne pas fonctionner dans une autre version de "MSXML2.ServerXMLHTTP" que v6):

httpRequest.setProxy 2, "http=localhost:8888", "" 

Le code Java utilise Apache HttpC LIENT, et selon la manual le proxy peut être réglé comme suit:

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpHost proxy = new HttpHost("localhost", 8888); 
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

I ajouté ce code au début de la méthode main(). Le code est exécuté dans Eclipse (Juno).

J'ai également ouvert l'adresse proxy (http: // localhost: 8888 /) dans un navigateur, et il me montre la page 'Fiddler Echo Service'. Fiddler est configuré pour afficher "Tous les processus".

Néanmoins, aucune de deux requêtes HTTP n'apparaît. La seule chose qui apparaît est la page ASP que je cours (http: // localhost: 8082/test.asp) qui fait la requête HTTP. Quand j'utilise mon navigateur, d'autres choses apparaissent sur Fiddler, donc je sais que ça fonctionne.

Quelqu'un a-t-il des idées?

+0

Vous êtes sur la bonne voie en définissant la propriété proxy sur l'objet httpRequest.Quelle est l'URL cible que vous essayez de capturer (par exemple, le service est-il également sur Localhost?)? – EricLaw

+0

L'URL cible est une URL sur la boutique en ligne. Parce qu'un message est renvoyé disant que quelque chose ne va pas avec l'authentification, je suppose qu'il n'y a pas de problème là-bas. –

Répondre

1

Je pensais à l'origine que parce que rien ne se présentait sur Fiddler avec les deux programmes, quelque chose n'allait pas avec Fiddler.

Mais les choses n'allaient pas avec les deux programmes. Pour le code ASP, setProxy doit appelé comme ceci:

xmlhttp.setProxy 2, "http://127.0.0.1:8888", "" 

donc ":: /" au lieu de "="

Faire Apache demandes HttpClient dans le code Java show en Fiddler était très compliqué parce que demande ont été envoyés en utilisant le protocole https. Bien que j'ai essayé plusieurs solutions proposées, je ne pouvais pas le faire fonctionner.

En fin de compte, je trouve que l'ajout

-Djavax.net.debug=all 

comme argument pour la machine virtuelle m'a montré ce que je avais besoin, les en-têtes qui étaient envoyés.

Questions connexes