2010-06-21 27 views
11

Tôi đang cố gắng gửi một bài đăng được mã hóa URL tới một API REST được triển khai trong PHP. Các dữ liệu POST chứa hai chuỗi người dùng cung cấp:Cách để thoát dữ liệu được mã hóa URL trong POST bằng 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); 
} 

này sẽ gửi một yêu cầu HTTP đến máy chủ chứa user=myusername&password=mypassword trong UTF-8 như dữ liệu POST của nó.

Làm cách nào để thoát khỏi chuỗi do người dùng cung cấp? Ví dụ: Ví dụ: nếu tôi có người dùng tên là big&mean, thì ký hiệu và ký tự nên được thoát như thế nào để nó không làm hỏng dòng yêu cầu?

Trả lời

17

Bạn có thể sử dụng lớp tĩnh HttpUtility trong System.Web để mã hóa và giải mã các giá trị liên quan đến HTML và Url.

Hãy thử HttpUtility.UrlEncode().

+0

Cảm ơn! Nếu tôi sử dụng phương thức đó trên một chuỗi chứa các ký tự UTF-8, chẳng hạn như s-z của Đức, cặp mã UTF-8 được chuyển thành '% c3% 9f'. Tôi giả định rằng có nghĩa là 'Content-Transfer-Encoding' sẽ được đặt thành '7bit' ngay bây giờ? – Cygon

+0

Một trong các tham số bạn có thể cung cấp với HttpUtility.UrlEncode là Mã hóa. Các số ký tự được sử dụng sau '%' phụ thuộc vào mã hóa. – pauloya

-3

Có vẻ như System.Web đã lỗi thời - cách mới hơn để truy cập vào đó là System.Net.WebUtility.HtmlEncode

+9

HtmlEncode là để thoát dữ liệu trong HTML, không phải của URL. – Ralf

+1

HtmlEncode không giống với UrlEncode. HtmlEncode sẽ chuyển đổi "<" thành "<", trong khi UrlEncode sẽ chuyển nó thành "% 3c". –

Các vấn đề liên quan