2012-03-23 41 views
11

Tôi không thực sự chắc chắn loại tiêu đề nào được đánh dấu các giá trị này, nhưng tôi nên thêm chúng bằng cách sử dụng HttpWebRequest như thế nào?Thêm tiêu đề tùy chỉnh bằng cách sử dụng HttpWebRequest

HTTP Header

là một phần tô đậm coi cơ thể của yêu cầu http hoặc dữ liệu tiêu đề? Nói cách khác, cách nào là đúng?

Dưới đây là đoạn code Tôi hiện đang sử dụng:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("/securecontrol/reset/passwordreset"); 
request.Headers.Add("Authorization", "Basic asdadsasdas8586"); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.Host = "www.xxxxxxxxxx.com"; 
request.Method = "POST"; 
request.Proxy = null; 
request.Headers.Add("&command=requestnewpassword"); 
request.Headers.Add("&application=netconnect"); 

Nhưng tôi nên sử dụng sau đây thay vì để xây dựng các yêu cầu HTTP trên?

string reqString = "&command=requestnewpassword&application=netconnect"; 
byte[] requestData = Encoding.UTF8.GetBytes(reqString); 

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("/securecontrol/reset/passwordreset"); 
request.Headers.Add("Authorization", "Basic ashAHasd87asdHasdas"); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = requestData.Length; 
request.Proxy = null; 
request.Host = "www.xxxxxxxxxx.com"; 
request.Method = "POST"; 

using (Stream st = request.GetRequestStream()) 
st.Write(requestData, 0, requestData.Length); 
+0

đoạn mã đầu tiên bạn nên làm việc tốt, nhưng để chắc chắn rằng dữ liệu là trong thực tế trong tiêu đề, bạn đã thử nhìn vào các gói tin trong Wireshark hoặc một cái gì đó tương tự? Trong Wireshark, bạn có thể nhấp chuột phải vào một gói, chọn để mở nó trong một cửa sổ mới, sau đó mở rộng phần "Giao thức truyền siêu văn bản". – Lander

+0

@M. Babcock: Chúng không giống nhau, tôi đã thay đổi các giá trị trong mã. – Tarik

+0

@Lander: Tôi đang làm việc với một máy chủ rất an toàn và mã thực sự quá lớn và có vẻ như phải mất thời gian để kiểm tra nó không may:/ – Tarik

Trả lời

11

IMHO nó được coi là dữ liệu tiêu đề không đúng định dạng.

Bạn thực sự muốn gửi các cặp giá trị tên đó làm nội dung yêu cầu (đây là cách POST hoạt động) và không phải là tiêu đề.

Cách thứ hai là đúng.

+0

OK cảm ơn tôi đồng ý với bạn Tôi chỉ muốn đảm bảo rằng tôi đang làm tốt. – Tarik

+0

Mặc dù đây có thể không phải là phương pháp hay nhất, việc gửi tiêu đề trong yêu cầu HTTP đôi khi là cần thiết, đặc biệt khi sử dụng một số API nhất định. – nmg49

8

Một phương pháp đơn giản của việc tạo ra các dịch vụ, thêm tiêu đề và đọc các phản ứng JSON,

private static void WebRequest() 
{ 
    const string WEBSERVICE_URL = "<<Web Service URL>>"; 
    try 
    { 
     var webRequest = System.Net.WebRequest.Create(WEBSERVICE_URL); 
     if (webRequest != null) 
     { 
      webRequest.Method = "GET"; 
      webRequest.Timeout = 20000; 
      webRequest.ContentType = "application/json"; 
      webRequest.Headers.Add("Authorization", "Basic dcmGV25hZFzc3VudDM6cGzdCdvQ="); 
      using (System.IO.Stream s = webRequest.GetResponse().GetResponseStream()) 
      { 
       using (System.IO.StreamReader sr = new System.IO.StreamReader(s)) 
       { 
        var jsonResponse = sr.ReadToEnd(); 
        Console.WriteLine(String.Format("Response: {0}", jsonResponse)); 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.ToString()); 
    } 
} 
+0

Hoàn hảo! Đây chính xác là những gì tôi cần cho tiêu đề của mình. Cảm ơn bạn. – Vippy

+0

Rất vui được trợ giúp @Vippy – Lucky

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