2010-06-21 11 views
11

Ich versuche, eine URL-codierte Post an eine REST-API in PHP zu senden. Die POST-Daten enthalten zwei Benutzer bereitgestellten Strings:Wie URL-codierte Daten in POST mit HttpWebRequest zu umgehen

WebRequest request = HttpWebRequest.Create(new Uri(serverUri, "rest")); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; 
request.Headers.Add("Content-Transfer-Encoding", "binary"); 

// Form the url-encoded credentials we'll use to log in 
StringBuilder builder = new StringBuilder(); 
builder.Append("user="); 
builder.Append(user); 
builder.Append("&password="); 
builder.Append(password); 
byte[] credentials = Encoding.UTF8.GetBytes(builder.ToString()); 

// Write the url-encoded post data into the request stream. 
request.ContentLength = credentials.Length; 
using (Stream requestStream = request.GetRequestStream()) { 
    requestStream.Write(credentials, 0, credentials.Length); 
} 

Dieser sendet eine HTTP-Anfrage an den Server user=myusername&password=mypassword in UTF-8 als POST-Daten enthält.

Wie kann ich die vom Benutzer bereitgestellten Strings umgehen? Zum Beispiel, wenn ich einen Benutzer mit dem Namen big&mean hätte, wie sollte das kaufmännische Undsand escaped werden, damit es die Anforderungszeile nicht durcheinanderbringt?

Antwort

17

Sie können die statische Klasse HttpUtility in System.Web zum Codieren und Decodieren von HTML- und URL-bezogenen Werten verwenden.

Versuchen Sie HttpUtility.UrlEncode().

+0

Dank! Wenn ich diese Methode für einen String verwende, der UTF-8-Zeichen enthält, z. B. ein deutsches s-z, wird das UTF-8-Code-Paar in '% c3% 9f' umgewandelt. Ich nehme an, dass das 'Content-Transfer-Encoding' nun auf' 7bit' gesetzt sein sollte? – Cygon

+0

Einer der Parameter, die Sie mit HttpUtility.UrlEncode bereitstellen können, ist die Codierung. Die nach dem '%' verwendeten Zeichenzahlen hängen von der Codierung ab. – pauloya

-3

Es scheint, dass System.Web veraltet ist - die neuere Art und Weise für den Zugriff ist System.Net.WebUtility.HtmlEncode

+9

HtmlEncode dient zum Entschlüsseln von Daten in HTML, nicht von URLs. – Ralf

+1

HtmlEncode ist nicht dasselbe wie UrlEncode. HtmlEncode konvertiert "<" in "<", während UrlEncode es in "% 3c" umwandelt. –