2009-03-30 8 views
-1

Cela me rend fou et je n'arrive pas à comprendre où je laisse tomber la balle. J'ai suivi quelques exemples trouvés via le googlemonsta en vain. Tout pointeur vers où je goofed serait grandement sollicité.Appel d'un POST à ​​un site externe avec C# (httpwebrequest)

 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! Dans la mesure où je peux dire sa frappe sur le site (je reçois html retour), mais les paramètres ne sont pas poussés sur. J'obtiens fondamentalement où les valeurs apparaîtraient s'il avait réussi. J'ai essayé d'enlever le premier & mais n'ai pas obtenu n'importe où.

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

+0

Quelle partie est un échec? – JaredPar

+0

Vous recevez un message d'erreur ou vous n'avez aucun résultat? – Micah

+0

"Je suis en train de voir où les valeurs apparaîtraient si elles avaient été couronnées de succès" Que voulez-vous dire par là? Les valeurs sont-elles affichées? Qu'est-ce qui ne fonctionne pas exactement? – BFree

Répondre

3

Peut-être se débarrasser du & dès le début du premier paramètre? À part ça, ça a l'air 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 à quoi ressemble votre code réel ou ce que le site réel attend.)

Veuillez 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 suis pas sûr que cela soit rempli automatiquement par WebRequest. Il vaudrait mieux utiliser WireShark pour vérifier s'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 ne avez pas besoin d'appeler Close si vous avez déjà une déclaration using pour le flux de réponse:

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

Merci pour la réponse Jon, question rapide si: quelle serait la longueur? Si j'utilise paramStream + URL, alors les erreurs b/c, je n'ai pas tout écrit, si j'utilise paramStream OU URL, alors il échoue en raison d'un dépassement de la longueur. Merci! – Chance

+0

Paramstream.Length devrait être la bonne taille. –

+0

Oui - quand j'ai enlevé le & en face de l'emplacement, il l'a accepté. Toujours pas d'accord, alors attendez que Wireshark télécharge à 2kbps ... merci pour l'aide. – Chance

1

Est-ce vous êtes sûr que vous avez toutes les valeurs nécessaires pour le poste? Une fois, j'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 que vous êtes ne manque rien de la forme est ce que je dis ...

EDIT: Encore une chose: Je viens de regarder à nouveau mon code où j'ai fait cela, et j'ai remarqué que j'avais aussi cette ligne dans là:

Je ne sais pas si vous en avez besoin, mais j'ai remarqué que vous ne définissiez pas la longueur.

+0

Cool merci - ajouté en vain bien. J'attends juste pour voir ce qui se passe sous le capot. – Chance

0

Ce n'est pas quelque chose d'aussi simple qu'un chariot-retour/nouvelle ligne après les paramètres est-il? En regardant certains documents sur HTTP sur les internets, vous avez apparemment besoin d'une ligne vide par la suite.

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

Questions connexes