Je souhaite publier des données de formulaire sur une URL spécifiée qui ne se trouve pas dans ma propre application Web. Il a le même domaine, tel que "domain.client.nl". L'application Web a une url "web.domain.client.nl" et l'url sur laquelle je souhaite publier est "idp.domain.client.nl". Mais mon code ne fait rien ..... est-ce que quelqu'un sait ce que je fais mal?
Wouter
StringBuilder postData = new StringBuilder();
postData.Append(HttpUtility.UrlEncode(String.Format("username={0}&", uname)));
postData.Append(HttpUtility.UrlEncode(String.Format("password={0}&", pword)));
postData.Append(HttpUtility.UrlEncode(String.Format("url_success={0}&", urlSuccess)));
postData.Append(HttpUtility.UrlEncode(String.Format("url_failed={0}", urlFailed)));
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] postBytes = ascii.GetBytes(postData.ToString());
// set up request object
HttpWebRequest request;
try
{
request = (HttpWebRequest)HttpWebRequest.Create(WebSiteConstants.UrlIdp);
}
catch (UriFormatException)
{
request = null;
}
if (request == null)
throw new ApplicationException("Invalid URL: " + WebSiteConstants.UrlIdp);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postBytes.Length;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
// add post data to request
Stream postStream = request.GetRequestStream();
postStream.Write(postBytes, 0, postBytes.Length);
postStream.Flush();
postStream.Close();
c#
post
httpwebrequest
wsplinter
la source
la source
WebClient
.Réponses:
Le nom du champ et la valeur doivent être encodés en URL. le format des données de publication et la chaîne de requête sont identiques
La façon de faire .net est quelque chose comme ça
Cela prendra soin d'encoder les champs et les noms de valeur
la source
string postdata = outgoingQueryString.ToString();
vous donnera une chaîne avec la valeur"System.Collections.Specialized.NameValueCollection"
.ToString()
, même si je ne me souviens pas maintenant si c'était en utilisant RestSharp. Possibilité définie. Merci pour la correction.outgoingQueryString
fonctionnait comme le suggère l'exemple de code. Ces deux questions répondent que - (1) HttpValueCollection et NameValueCollection et (2) Toute classe .NET qui crée une chaîne de requête à partir de paires clé-valeur ou similaires .Essaye ça:
la source
request.HaveResponse
vous devez d'abord obtenir la réponse.HttpWebResponse response = (HttpWebResponse) request.GetResponse(); if (request.HaveResponse) { ... }
Vous encodez le formulaire de manière incorrecte. Vous ne devez encoder que les valeurs:
Éditer
J'avais tort. Conformément à la section 8.2.1 de la RFC1866, les noms et les valeurs doivent être codés.
Mais pour l'exemple donné, les noms n'ont aucun caractère à encoder, donc dans ce cas mon exemple de code est correct;)
Le code de la question est toujours incorrect car il encoderait le signe égal qui est la raison pour laquelle le serveur Web ne peut pas le décoder.
Une manière plus appropriée aurait été:
la source