Question

Comme certains d'entre vous le savent, vous êtes en mesure de publier avec C#.Cela signifie que vous pouvez "pousser" des boutons sur un site web avec webrequest/réponse.Maintenant il y a aussi des boutons sur des sites qui fonctionnent avec javascript, ils commencent comme:

(function($j){
$j.data(document, 'maxPictureSize', 764327);
share_init();
})(jQuery.noConflict());

Est-il une solution, vous pouvez faire ces appels de fonction en C# avec comme httprequests ou tout autre type de bibliothèque?

Était-ce utile?

La solution

Je suis en supposant que vous avez un programme qui veut manipuler le serveur "back-end" pour une page web en faisant le serveur pense que quelqu'un a poussé un bouton qui affiche, et l'envoi des données que la page web serait de joindre à son POSTE.

Le premier outil que vous avez besoin est Le Moniteur Réseau Microsoft 3.3, ou un autre réseau de paquets outil de traçage.L'utiliser pour regarder le POST de la vraie page web.NetMon (au moins) se décompose le paquet en le HTTP morceaux et les en-têtes, de sorte que vous pouvez facilement voir ce qui se passe.

Maintenant, vous savez ce que les données le vrai POST est de l'envoi, et l'URL à laquelle il envoie les données (avec l'éventuel "query string" - ce qui est inhabituel pour un POSTE).

Ensuite, vous devez écrire en C# pour créer le même genre de POST vers la même URL.Il semble que vous savez déjà sur HttpWebRequest/HttpWebResponse donc je ne vais pas expliquer en détail.Vous avez peut-être remarqué dans votre trace NetMon que l' Content-Type l'en-tête a été application/x-www-form-urlencoded.C'est le plus souvent données à partir d'un formulaire HTML qui est de l'URL-Encodé (comme le nom de), vous devez Encoder vos données avant de le Poster, et vous avez besoin de connaître la taille de la les données encodées pour l' Content-Length.HttpUtility.La fonction UrlEncode() est une méthode à utiliser pour le codage.

Une fois que vous pensez que vous avez, essayez-la et utilisez NetMon pour inspecter votre requête POST et la réponse du serveur.Continuez jusqu'à ce que vous avez dupliqué ce que le mystère de la page web est en train de faire.

Autres conseils

Ok forme utilisation WebBrowser pour charger la page:

webBrowser.Navigate( url );

puis enregistrez le contenu du formulaire de broweser Web à un fichier ou une chaîne:

File.WriteAllText(@"c:\test\ajax_test.txt", webBrowser1.Document.Body.Parent.OuterHtml, Encoding.GetEncoding(webBrowser1.Document.Encoding));

Maintenant, si vous regardez le fichier txt, il devrait avoir les balises HTML que vous recherchez.

Même lorsque l'aide de JavaScript pour faire un post il y a un poste quelque part dans le JS qui fonctionne de la même manière que le bouton soumettre. Il suffit de creuser à l'endroit où les postes de code JS et de voir comment il le fait. Puis ouvrer le même poste en C #.

Prenez pour sa propre fonction __doPostBack exemple de ASP.NET

var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

Vous pouvez voir qu'il creuse pour la forme définit plusieurs valeurs pour les champs d'entrée et fait un soumettre. Fondamentalement, vous devez remplir les mêmes valeurs pour les entrées et présenter la même forme et vous avez la JS vous Envoyer Envoyé.

Vous devez saisir les demandes et Switches ces boutons envoient et les simulez avec HttpWebRequest . Vous pouvez également jeter un oeil à Watin si vous voulez automatiser les actions des utilisateurs sur les sites Web.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top