2. HTTP
2.4. Không gian tên System.Web
Một trong những ứng dụng phổ biến nhất của HTTP trong các ứng dụng là khả năng để tải nội dung HTML của một trang thành một chuỗi. Ứng dụng sau đây chứng minh khái niệm này.
Đó chắc chắn là có thể thực hiện HTTP ở cấp ổ cắm, nhưng có là một sự giàu có của các đối tượng sẵn sàng cho sử dụng trong các ứng dụng của Client HTTP, và nó làm cho cảm giác ít để phát minh lại bánh xe. Các máy chủ HTTP trong phần tiếp theo được thực hiện bằng cách sử dụng HTTPWebReqest. Bắt đầu một dự án mới trong Visual Studio. NET, và kéo trên hai textbox, tbResult và tbUrl. TbResults nên được thiết lập với multiline = true. Một nút, btnCapture cũng nên được thêm vào.
Nhấp vào nút Capture, và nhập vào sau code:
private void btnCapture_Click(object sender, EventArgs e) {
tbResult.Text = getHTTP(tbUrl.Text); }
Xây dựng hàm getHTTP
privatestring getHTTP(string szURL) {
HttpWebRequest httpRequest; HttpWebResponse httpResponse; string bodyText = "";
Stream responseStream;
Byte[] RecvBytes = new Byte[Byte.MaxValue]; Int32 bytes; httpRequest = (HttpWebRequest)WebRequest.Create(szURL); httpResponse = (HttpWebResponse)httpRequest.GetResponse(); responseStream = httpResponse.GetResponseStream(); while (true) {
bytes = responseStream.Read(RecvBytes, 0, RecvBytes.Length); if (bytes <= 0) break;
bodyText += System.Text.Encoding.UTF8.GetString(RecvBytes, 0, bytes); }
return bodyText; }
Để có một cái nhìn gần hơn vào mã này, nó cần được tương đối dễ dàng để xác định làm thế nào nó hoạt động. Hành động đầu tiên được thực hiện khi mã này được thực hiện là một phương pháp tĩnh trên lớp WebRequest được gọi và thông qua các szURL chuỗi như một tham số. Điều này tạo ra một đối tượng WebRequest có thể được đúc vào một đối tượng HttpWebRequest, sẽ xử lý các kết nối HTTP đi. Một khi chúng ta có một đối tượng HttpWebRequest, sau đó chúng tôi có thể gửi yêu cầu HTTP đến máy chủ và bắt đầu nhận dữ liệu từ máy chủ bằng cách gọi
phương thức GetResponse. Giá trị trả lại sau đó bỏ một đối tượng HttpWebResponse, mà sau đó được tổ chức tại biến HttpResponse.
Một phản ứng từ một máy chủ Web là không đồng bộ của tự nhiên, do đó, nó là tự nhiên để tạo ra một dòng từ dữ liệu này trở về và đọc nó trong khi nó trở nên có sẵn. Để làm điều này, chúng ta có thể tạo ra một dòng bằng cách gọi phương thức GetResponseStream. Một khi dòng thu được, chúng ta có thể đọc byte từ nó trong khối 256 byte (byte.Max). Đọc dữ liệu trong khối cải thiện hiệu suất. Kích thước đoạn có thể được tự ý lựa chọn, nhưng 256 là hiệu quả.
Mã này nằm trong một vòng lặp vô hạn cho đến khi tất cả các dữ liệu đến nhận được. Trong một môi trường sản xuất, do đó, loại hành động này nên được chứa trong một chủ đề riêng biệt. Một khi chúng ta có một chuỗi chứa tất cả của HTML, chúng tôi chỉ đơn giản là có thể đổ nó vào màn hình. Không có chế biến khác yêu cầu. Bạn cũng sẽ cần một số phụ không gian tên:
privatevoid btnCapture_Click(object sender, EventArgs e) {
tbPost.Text = HttpUtility.UrlEncode(tbPost.Text);
tbResult.Text = getHTTP(tbUrl.Text, "tbPost=" + tbPost.Text); }
publicstring getHTTP(string szURL, string szPost) { HttpWebRequest httprequest; HttpWebResponse httpresponse; StreamReader bodyreader; string bodytext = ""; Stream responsestream; Stream requestStream; httprequest = (HttpWebRequest)WebRequest.Create(szURL); httprequest.Method = "POST"; httprequest.ContentType = "application/x-www-form-urlencoded"; httprequest.ContentLength = szPost.Length; requestStream = httprequest.GetRequestStream(); requestStream.Write(Encoding.ASCII.GetBytes(szPost), 0, szPost.Length); requestStream.Close(); httpresponse = (HttpWebResponse)httprequest.GetResponse(); responsestream = httpresponse.GetResponseStream();
bodyreader = new StreamReader(responsestream); bodytext = bodyreader.ReadToEnd();
return bodytext; }