Frage

Wie einige von euch vielleicht wissen, sind Sie POST mit C # möglich. Das heißt, Sie können „Push“ Buttons auf einer Website mit webrequest / Antwort. Nun gibt es auch Tasten auf Sites, welche die Arbeit mit Javascript, sie beginnen wie:

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

Gibt es eine Lösung, die Sie diese Funktionsaufrufe in C # mit wie httprequests oder jede andere Art von Bibliothek machen?

War es hilfreich?

Lösung

Ich nehme an, Sie ein Programm, das manipulieren will denken, den Server „Back End“ für eine Webseite, indem der Server, dass jemand drückte auf einen Knopf, die Beiträge und die Daten zu senden, dass die Webseite umfassen würde mit seinem POST.

Das erste Werkzeug, das Sie brauchen, ist Microsoft Network Monitor 3.3 oder ein anderes Netzwerkpaket Tracing-Tool. Verwenden Sie diese auf der POST von der realen Web-Seite zu sehen. NetMon (mindestens) zerlegt das Paket in die HTTP-Stücke und Header, so können Sie leicht erkennen, was los ist.

Jetzt wissen Sie, welche Daten die reale POST sendet, und die URL, auf die sie die Daten senden (mit einem möglichen „Query-String“ - was für eine POST ungewöhnlich ist).

Als nächstes müssen Sie zu schreiben C # die gleiche Art von POST auf die gleiche URL zu erstellen. Es scheint, dass Sie bereits wissen, über HttpWebRequest / HttpWebResponse, damit ich sie nicht im Detail erklären. Sie haben in Ihrer NetMon Spur bemerkt, dass der Content-Type Header war application / x-www-form-urlencoded . Dies ist am häufigsten von Daten aus einem HTML-Formular, das URL-encoded (wie der Name) ist, so dass Sie vor der Veröffentlichung, es zu URL-Encode Ihre Daten benötigen, und Sie müssen die Größe der um codierte Daten kennen für den Content-Length . HttpUtility.UrlEncode () ist ein Verfahren zur Verwendung für diese Codierung.

Wenn Sie denken, dass Sie es haben, versuchen Sie es und NetMon benutzen, um Ihre POST-Anfrage und die Antwort vom Server zu inspizieren. Fahren Sie bis Sie dupliziert haben, was das Geheimnis Webseite tut.

Andere Tipps

Ok Verwendung WebBrowser Form der Seite zu laden:

webBrowser.Navigate( url );

speichern Sie die Inhalte der Web-broweser Form in eine Datei oder einen String:

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

jetzt, wenn Sie auf die TXT-Datei aussehen sollte es die HTML-Tags Sie suchen haben.

Auch wenn JavaScript mit einem POST zu tun, gibt es eine POST irgendwo in der JS, die die gleiche Art und Weise funktioniert wie Absenden-Button. Sie müssen nur an den Ort graben, wo die JS-Code-Beiträge und sehen, wie sie es tut. Dann Handwerk den gleichen Beitrag in C #.

Nehmen Sie zum Beispiel ASP.NET eigene __doPostBack Funktion

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();
    }
}

Sie sehen, dass es gräbt für die Form mehrere Werte Sätze für Eingabefelder und macht ein vorlegen. Grundsätzlich müssen Sie die gleichen Werte für die Eingänge füllen und das gleiche Formular und Sie haben die JS bekommen demütige dich getan.

Sie müssen die Anforderungen und Header diese Tasten erfassen senden und simulieren sie mit HttpWebRequest . Sie könnten auch einen Blick auf WatiN , wenn Sie Benutzeraktionen auf Websites automatisieren wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top