Как избежать URL-кодированных данных в POST с помощью HttpWebRequest
Я пытаюсь отправить сообщение в URL-кодировке в REST API, реализованный в PHP. Данные POST содержат две строки, предоставленные пользователем:
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);
}
Это отправляет HTTP-запрос на сервер, содержащий user=myusername&password=mypassword
в UTF-8 в качестве данных POST.
как я могу избежать пользовательских строк?
Например, если бы у меня был пользователь с именем big&mean
, как должен быть экранирован амперсанд, чтобы он не испортил строку запроса?
2 ответов
вы можете использовать static HttpUtility
класса в системе.Web для кодирования и декодирования значений, связанных с HTML и Url.
попробовать HttpUtility.UrlEncode()
.
казалось бы, что система.Web устарел-более новый способ доступа к нему System.Net.WebUtility.HtmlEncode