Frage

Das treibt mich verrückt, und ich kann nicht herausfinden, wo ich den Ball am fallen. Ich habe ein paar Beispiele über die googlemonsta ohne Erfolg gefunden gefolgt. Jeder Hinweis darauf, wo ich gepatzt würde sehr apperciated.

        var writer = new StringWriter();
        param = "location=" + Server.UrlEncode(param);
        byte[] paramStream = Encoding.ASCII.GetBytes(param + "&param2=value");
        var URL = "http://www.somesite.com";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2";
        request.ContentLength = paramStream.Length;
        using( var stream = request.GetRequestStream())
        {
            stream.Write(paramStream, 0, paramStream.Length);
        }

        var response = request.GetResponse();

        string result;
        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            result = sr.ReadToEnd();
        }

Danke!

EDIT: Soweit ich sagen kann, seine die Seite schlagen (ich erhalte html zurück), aber die params nicht umgeworfen. Ich bin immer im Grunde, wo die Werte wäre es erfolgreich erscheinen musste. Ich habe versucht, die erste Entfernung & aber knapp überall.

EDIT:. Edited Code, um Änderungen

War es hilfreich?

Lösung

Möglicherweise werde die rid & von Anfang des ersten Parameters? Abgesehen davon sieht es grundsätzlich in Ordnung. (Überprüfen Sie die Parameternamen in Ihrem realen Code - wo du hast „Paramater“ in der Probe sollte es fast sicher sein „Parameter“ - aber wir wissen nicht, was Ihr richtiger Code aussieht oder was die reale Seite erwartet.)

Bitte weitere Informationen geben, was tatsächlich passiert. Wir wissen, dass es nicht funktioniert, aber es gibt viele verschiedene mögliche Ausfallarten:)

Ein zusätzlicher Gedanke kommt - nicht die Inhaltslänge angegeben haben. Ich bin mir nicht sicher, ob dies durch WebRequest automatisch ausgefüllt wird. Es würde sich lohnen, mit Wireshark zu überprüfen, ob es in der Outbound-Anforderung vorhanden ist.

Just als allgemeiner Punkt der Praxis sollten Sie die WebResponse verfügen, und Sie brauchen nicht Close zu nennen, wenn Sie bereits eine using Erklärung für den Antwortstream bekommen:

string result;
using (WebResponse response = request.GetResponse())
{
    using (var sr = new StreamReader(response.GetResponseStream()))
    {
        result = sr.ReadToEnd();
    }
}

Andere Tipps

Sind Sie sicher, dass Sie alle Werte dringend benötigt für die Post? Ich hatte einmal einen Fall, in dem es ein verstecktes Eingabefeld auf dem Formular war, dass so etwas war:

<input name="action" type="hidden" id="action" value="login">

, und ich hatte das als param als liefern:

&action=login

Stellen Sie sicher, dass Sie nicht alles von der Form fehlt, ist, was ich sage ...

EDIT: Eine weitere Sache: Ich habe in meinem Code sah wieder, wo ich dies getan haben, und bemerkte, dass ich auch diese Zeile drin:

request.ContentLength = bytes.Length;

Nicht sicher, ob Sie brauchen, aber ich bemerkt, dass Sie die Länge waren nicht einstellen.

Es ist nicht etwas so einfach wie ein Wagenrücklauf / new-line nach den Parametern ist es? Ein Blick auf einige Dokumente auf HTTP auf den internets, müssen Sie offenbar eine Leerzeile danach.

(ich würde telneting auf den Webserver vorschlagen manuell und Einfügen Ihrer Anfrage.)

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