J'essaie d'envoyer un message codé par URL à une API REST implémentée en PHP. Les données de message contient deux chaînes fournies par l'utilisateur:Comment faire pour échapper des données codées en URL dans POST avec HttpWebRequest
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);
}
Cela envoie une requête HTTP au serveur contenant user=myusername&password=mypassword
en UTF-8 comme ses données POST.
Comment puis-je échapper les chaînes fournies par l'utilisateur? Par exemple, si j'avais un utilisateur nommé big&mean
, comment l'esperluette devrait-elle être échappée afin qu'elle ne gâche pas la ligne de demande?
Merci! Si j'utilise cette méthode sur une chaîne contenant des caractères UTF-8, comme un allemand s-z, la paire de codes UTF-8 est transformée en '% c3% 9f'. Je suppose que cela signifie que 'Content-Transfer-Encoding' devrait être réglé sur' 7bit' maintenant? – Cygon
L'un des paramètres que vous pouvez fournir avec HttpUtility.UrlEncode est le codage. Les numéros de caractères utilisés après le '%' dépendent du codage. – pauloya