2010-06-19 3 views
1

Je travaille sur Web Scraping en utilisant C# HttpWebRequest/HttpWebResponse. Dans la plupart des cas, ce processus s'est bien déroulé. Mais après avoir fait mon chemin à travers plusieurs pages, je suis coincé avec ce qui semble être une incohérence entre les tests avec le Web Browser et les appels HttpWebRequest/HttpWebResponse.POSTing incohérent entre Web Browser et HttpWebRequest

Le problème se produit quand je tombe sur une page contenant un élément d'entrée qui a un nom semblable à ceci: «RidiculouslyLongInputName.RidiculouslyLongInputName.RidiculouslyLongInputName @ RidiculouslyLong »

une valeur pour POSTer cet élément d'entrée provoque une erreur 500 lors de l'utilisation de HttpWebRequest, mais fonctionne correctement lors de l'envoi via le navigateur. Si je supprime cette valeur d'entrée des données de publication, HttpWebRequest n'obtiendra pas l'erreur 500. Mais alors je suis coincé avec un problème de validation de données sur le site.

Une idée sur pourquoi HttpWebRequest échoue?

Répondre

1

C'est le cas lorsque les renifleurs de paquets sont extrêmement utiles pour voir exactement quel type de données circule et quelle est la différence.

http://www.wireshark.org/

est un excellent outil pour des choses comme ça.

Filtrez uniquement les domaines qui vous intéressent, puis envoyez le paquet avec HttpWebRequest. Enregistrez les données de paquet quelque part. Répétez mais faites la demande via le navigateur. Vérifiez la différence.

Si c'est effectivement un problème avec les variables POST, cela devrait être évident dans la charge utile HTTP.

0

Vous ne savez pas pourquoi vous rencontrez le problème, mais je vous recommande de saisir une copie de Fiddler et de regarder ce que le navigateur envoie dans la requête POST. Il est possible qu'il y ait quelque chose de moins qu'évident.

0

Vous pouvez également utiliser l'extension Firebug avec Firefox. Avec cette extension installée et activée, parcourez l'ensemble du scénario dans Firefox. FIrebug vous dira la requête/réponse exacte envoyée par le navigateur. Vous pouvez ensuite dupliquer autant que possible en utilisant HttpWebRequest

0

D'abord merci pour la réponse MEF. Ce cas était une erreur personnelle, alors j'ai supprimé la question.

Je pense que le meilleur outil pour votre cas est Fiddler mais je suppose qu'il y a d'autres JavaScript attachés à ce bouton ou quelque chose comme ça vous manque pour imiter. WebRequest ne peut pas le faire pour vous et WebBrowser peut faire, car il travaille sur DOM.

Afin d'utiliser correctement WebRequest vous avez besoin de faire de l'ingénierie inverse à chaque demande par quelque chose comme Fiddler. Il est très difficile de trouver ce qui se passe exactement en regardant la source de la page (et il est référencé Javascripts/CSS ...).

Questions connexes