Domanda

Questo mi sta facendo i dadi e non riesco a capire dove sto cadere la palla. Ho seguito alcuni esempi trovati tramite il googlemonsta senza alcun risultato. Qualsiasi indicazione di dove ho preso una cantonata sarebbe molto 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();
        }

Grazie!

Modifica Per quanto posso dire la sua colpire il sito (sto ottenendo html indietro) ma i params non sono spinto oltre. Sto ricevendo fondamentalmente dove i valori apparirebbe se fosse stato di successo. Ho provato a rimuovere il primo e, ma non ha ancora arrivare ovunque.

EDIT:. codice modificato in modo da riflettere le modifiche

È stato utile?

Soluzione

Forse sbarazzarsi del & dall'inizio del primo parametro? Diverso da quello che sembra praticamente a posto. (Controllare i nomi dei parametri nel codice di reale - dove hai "paramater" nel campione che dovrebbe quasi certamente "parametro" -, ma non sappiamo che cosa il vostro codice vero e proprio si presenta come o che cosa si aspetta che il sito vero e proprio.)

Si prega di fornire maggiori informazioni su quello che sta realmente accadendo. Sappiamo che non funziona, ma ci sono un sacco di diversi modi di guasto possibili:)

Un pensiero in più si verifica - non si è specificata la lunghezza del contenuto. Non sono sicuro se questo viene compilato automaticamente da WebRequest. Sarebbe la pena utilizzare WireShark per verificare se sia o non è presente nella richiesta in uscita.

Proprio come un punto generale della pratica, si dovrebbe disporre della WebResponse, e non c'è bisogno di chiamare Close se hai già una dichiarazione using per il flusso di risposta:

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

Altri suggerimenti

Sei sicuro di avere tutte le neccessary valori per il posto? Una volta ho avuto un caso in cui ci fosse un campo di input nascosto sulla forma che era qualcosa come:

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

e ho dovuto fornire che come param come:

&action=login

Assicurarsi che non manca nulla dal modulo è quello che sto dicendo ...

EDIT: di più una cosa: ho appena guardato il mio codice di nuovo in cui ho fatto questo, e ho notato che ho avuto anche questa linea in là:

request.ContentLength = bytes.Length;

Non è sicuro se avete bisogno di questo, ma ho notato che non si stavano mettendo la lunghezza.

Non è qualcosa di semplice come un ritorno a capo / nuova-line dopo che i parametri si tratta? Guardando alcuni documenti su HTTP sui internet, è a quanto pare necessaria una riga vuota dopo.

(vorrei suggerire telnet al server Web manualmente e incollando la vostra richiesta.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top