Question

Cela me rend dingue et je ne peux pas savoir où je laisser tomber la balle. J'ai suivi quelques exemples trouvés par le googlemonsta en vain. Tout pointeur vers où je gaffé serait grandement 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();
        }

Merci!

EDIT: Pour autant que je peux dire son frapper le site (Je reviens html) mais les params ne sont pas poussé plus. Je suis fondamentalement obtenir où les valeurs apparaîtraient si elle avait été couronnée de succès. Je l'ai essayé d'enlever le premier et na pas, mais nulle part.

EDIT:. Code modifié pour refléter les modifications

Était-ce utile?

La solution

Il est possible de se débarrasser de et dès le début du premier paramètre? Autre que cela ressemble fondamentalement correct. (Vérifiez les noms des paramètres dans votre code réel - où vous avez « paramater » dans l'échantillon, il devrait certainement être « paramètre » - mais nous ne savons pas ce que votre vrai code ressemble ou ce que le site réel attend.)

S'il vous plaît donner plus d'informations sur ce qui se passe réellement. Nous savons que cela ne fonctionne pas, mais il y a beaucoup de différents modes de défaillance possibles:)

Une pensée supplémentaire se produit - vous n'avez pas spécifié la longueur du contenu. Je ne sais pas si cela est rempli automatiquement par WebRequest. Il serait intéressant d'utiliser WireShark pour vérifier si oui ou non il est présent dans la requête sortante.

Tout comme un point général de la pratique, vous devez disposer du WebResponse, et vous n'avez pas besoin d'appeler Close si vous avez déjà une déclaration de using pour le flux de réponse:

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

Autres conseils

Êtes-vous sûr que vous avez toutes les valeurs neccessary pour le poste? J'ai eu un cas où il y avait un champ d'entrée caché sur la forme qui était quelque chose comme:

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

et je devais fournir que comme param:

&action=login

Assurez-vous de ne rien manquer de la forme est ce que je veux dire ...

EDIT: Une chose: Je regardais mon code encore une fois où je l'ai fait, et remarqué que j'avais aussi cette ligne là-dedans:

request.ContentLength = bytes.Length;

Je ne sais pas si vous avez besoin, mais je remarqué que vous ne déclenchaient pas de la longueur.

Il n'est pas quelque chose d'aussi simple que d'un retour chariot / nouvelle ligne après les paramètres est-il? En regardant quelques docs sur HTTP sur les internets, apparemment vous avez besoin d'une ligne vide après.

(je suggère TELNET au serveur Web manuellement et coller votre demande.)

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