2009-12-05 20 views
5

có thư viện C# phổ biến cho HTTP hoạt động không? Ví dụ: đơn giản hóa làm việc với httpwebrequest etccó thư viện C# phổ biến cho HTTP hoạt động không? Ví dụ: đơn giản hóa việc làm việc với httpwebrequest etc

Ví dụ tải tệp http lên với một số tham số yêu cầu nhiều dòng và kiến ​​thức về định dạng nội dung giao thức Http vv WebClient chính nó không làm điều đó.

Vì vậy, mới, có một thư viện nổi tiếng mà các nhà phát triển C# sử dụng ở đây không?

Cảm ơn

+2

vấn đề gì bạn có với 'WebClient'? Sẽ rất khó để đơn giản hơn thế và vẫn hữu ích. –

+0

Xem các nhận xét khác của tôi, nhưng cụ thể là một POST có cả tệp tải lên và bao gồm một số thông số POST (ví dụ: mã thông báo xác thực sử dụng duy nhất trong trường hợp này) – Greg

Trả lời

1

đây là câu trả lời tốt nhất mà tôi có thể xác định cho đến nay:

Here's a link tôi thấy rằng được gần với những gì tôi đã nghĩ đến việc. Điều này giải quyết yêu cầu cụ thể của tôi, tuy nhiên dường như không quá rộng về mặt phương pháp. Có lẽ đây chỉ là những phương pháp trợ giúp quan trọng được yêu cầu chủ yếu ở trên/ngoài các lớp WebClient/HttpWebRequest cơ bản hỗ trợ? Dù sao nếu có ai biết về một thư viện C# HTTP phổ biến được biết đến nhiều hơn điều này, hãy cho tôi biết. Khác cho thời điểm này liên kết này là tốt nhất tôi có thể tìm thấy cho đến nay để trả lời câu hỏi của tôi. Cảm ơn tất cả các bình luận đã cập nhật.

2

Bạn đang tìm thư viện Ajax, kiểm soát tải lên tệp hoặc cả hai, hay không? Hãy xem AsyncFileUpload của AjaxToolkit.

+0

Thêm thư viện http utils nổi tiếng/phổ biến, vì vậy tôi sẽ nói cả hai tôi đoán câu hỏi của bạn – Greg

+0

các từ tổng quan cho thấy một "AsyncFileUpload là một ASP.NET AJAX Control" - vì vậy trong trường hợp này tôi đoán nó isnt 'thực sự là một thư viện độc lập có thể được sử dụng trong phát triển WinForms nói sau đó? – Greg

+0

Winforms? Tôi nghĩ bạn có nghĩa là asp.net? Bạn đã đề cập đến HTTP và httpwebrequest trong tiêu đề? AjaxToolkit hoạt động với .Net, do đó, về vấn đề đó, nó không phải là "độc lập". Nhưng bạn không cần bất cứ điều gì khác để sử dụng nó. – cdonner

3

WebClient sẽ làm điều đó. Giống như:

var c = new System.Net.WebClient();  
c.UploadFile(url, filename); 

Nếu điều này là không đủ, cụ thể hơn. Ý bạn là gì?

+0

Thông số bài đăng biểu mẫu thông thường – Greg

+0

Henk, WebClinet() có hỗ trợ HTTPS bằng SSL không? Giống như nếu tôi muốn ServicePointManager.ServerCertificateValidationCallback + = new System.Net.Security.RemoteCertificateValidationCallback (ValidateServerCertificate); – Sunil

13

Biểu mẫu web được gửi theo một trong hai định dạng: application/x-www-form-urlencodedmultipart/form-data.

WebClient cung cấp cách rất đơn giản và thuận tiện để tải bất kỳ loại dữ liệu nào lên trang web. Trong trường hợp đơn đăng ký/x-www-form-urlencoded, tất cả những gì bạn phải làm là cung cấp NameValueCollection. Trong trường hợp multipart/form-data, AFAIK, bạn phải tự tạo dữ liệu yêu cầu (có thể bao gồm cả tệp và cặp giá trị tên).


application/x-www-form-urlencoded

NameValueCollection formData = new NameValueCollection(); 
formData["q"] = "c# webclient post urlencoded"; 
formData["btnG"] = "Google Search"; 
formData["hl"] = "en"; 

WebClient myWebClient = new WebClient(); 
myWebClient.UploadValues(uriString, formData); 

WebClient.UploadValues bộ phương thức HTTP để "POST"Content-Type-"application/x-www-form-urlencoded", URL-mã hóa formData và sau đó tải lên được chỉ định uriString.


multipart/form-data

string formData = @"--AaB03x 
Content-Disposition: form-data; name=""submit-name"" 

Larry 
--AaB03x 
Content-Disposition: form-data; name=""files""; filename=""file1.dat"" 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: base64 

" + Convert.ToBase64String(
    File.ReadAllBytes("file1.dat"), Base64FormattingOptions.InsertLineBreaks) + @" 
--AaB03x-- 
"; 

WebClient myWebClient = new WebClient(); 
myWebClient.Encoding = Encoding.ASCII; 
myWebClient.Headers.Add("Content-Type", "multipart/form-data; boundary=AaB03x"); 
myWebClient.UploadString(uriString, formData); 

này đặt Content-Type-"multipart/form-data" với ranh giới sử dụng trong các dữ liệu theo yêu cầu. WebClient.UploadData đặt phương thức HTTP thành "POST" và tải mảng byte lên uriString. Dữ liệu yêu cầu trong ví dụ này chứa một tệp file1.dat và thông số biểu mẫu submit-name được đặt thành Larry. Định dạng được mô tả trong RFC2388.

+0

Umm ... làm thế nào về trường hợp cụ thể tôi có nơi tôi cần phải làm một tập tin tải lên, nhưng trong cùng một POST tôi cần phải bao gồm một số thông số hình thức? WebClient có thể xử lý việc này không? Cảm ơn – Greg

+0

* multipart/form-data * là bạn của bạn. – dtb

+0

Cảm ơn - Điều này thật tuyệt vời khi biết. Tôi đoán sẽ quay trở lại câu hỏi của tôi cho dù có một thư viện phổ biến đóng gói các chức năng http như thế này? Ví dụ: trong trường hợp này, bạn chỉ cần chuyển tên tệp và cặp giá trị chính ... – Greg

0

Chilkat Components

http://www.example-code.com

Chilkat.HttpRequest req = new Chilkat.HttpRequest(); 
Chilkat.Http http = new Chilkat.Http(); 

bool success; 

// Any string unlocks the component for the 1st 30-days. 
success = http.UnlockComponent("Anything for 30-day trial"); 
if (success != true) { 
    MessageBox.Show(http.LastErrorText); 
    return; 
} 

// Build an HTTP POST Request: 
req.UsePost(); 
req.Path = "/testPostHandler.asp"; 
req.AddParam("arg1","This is the value for arg1."); 
req.AddParam("arg2","This is the value for arg2."); 
req.AddParam("arg3","This is the value for arg3."); 

// Send the HTTP POST and get the response. Note: This is a blocking call. 
// The method does not return until the full HTTP response is received. 
string domain; 
int port; 
bool ssl; 
domain = "www.chilkatsoft.com"; 
port = 80; 
ssl = false; 
Chilkat.HttpResponse resp = null; 
resp = http.SynchronousRequest(domain,port,ssl,req); 
if (resp == null) { 
    textBox1.Text += http.LastErrorText + "\r\n"; 
} 
else { 
    // Display the HTML page returned. 
    textBox1.Text += resp.BodyStr + "\r\n"; 
} 
Các vấn đề liên quan