Ich möchte einige Formulardaten an eine angegebene URL senden, die sich nicht in meiner eigenen Webanwendung befindet. Es hat dieselbe Domain wie "domain.client.nl". Die Webanwendung hat eine URL "web.domain.client.nl". Die URL, unter der ich posten möchte, lautet "idp.domain.client.nl". Aber mein Code macht nichts ..... weiß jemand, was ich falsch mache?
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
quelle
quelle
WebClient
.Antworten:
Sowohl der Feldname als auch der Wert sollten url-codiert sein. Format der Postdaten und Abfragezeichenfolge sind identisch
Die .net-Methode ist ungefähr so
Dadurch werden die Felder und die Wertnamen codiert
quelle
string postdata = outgoingQueryString.ToString();
gibt Ihnen eine Zeichenfolge mit dem Wert"System.Collections.Specialized.NameValueCollection"
.ToString()
, obwohl ich mich jetzt nicht erinnern kann, ob es während der Verwendung von RestSharp war. Bestimmte Möglichkeit. Danke für die Korrektur.outgoingQueryString
der Beispielcode funktioniert. Diese beiden Fragen beantworten Folgendes: (1) HttpValueCollection und NameValueCollection und (2) Jede .NET-Klasse, die eine Abfragezeichenfolge mit Schlüsselwertpaaren oder dergleichen erstellt .Versuche dies:
quelle
request.HaveResponse
Sie tatsächlich bekommen zuerst die Antwort.HttpWebResponse response = (HttpWebResponse) request.GetResponse(); if (request.HaveResponse) { ... }
Sie codieren das Formular falsch. Sie sollten nur die Werte codieren:
bearbeiten
Ich habe mich geirrt Gemäß RFC1866 Abschnitt 8.2.1 sollten sowohl Namen als auch Werte codiert werden.
Für das angegebene Beispiel haben die Namen jedoch keine Zeichen, die codiert werden müssen. In diesem Fall ist mein Codebeispiel also korrekt;)
Der Code in der Frage ist immer noch falsch, da er das Gleichheitszeichen codieren würde. Dies ist der Grund, warum der Webserver es nicht decodieren kann.
Ein richtigerer Weg wäre gewesen:
quelle