2009-12-05 11 views
5

czy istnieje popularna biblioteka C# do pracy z HTTP? Np. Upraszczanie pracy z httpwebrequest itp.jest popularna biblioteka C# do pracy z HTTP? Np. Upraszczanie pracy z httpwebrequest itp.

Na przykład, przesyłanie pliku http z niektórymi parametrami wymaga wielu wierszy i znajomości formatu protokołu protokołu HTTP itd. Sam WebClient tego nie robi.

Czy jest więc nowa, czy istnieje dobrze znana biblioteka, której używają deweloperzy C#?

Dzięki

+2

Jaki problem masz z 'WebClient'? Trudniej byłoby być prostszym i nadal być przydatnym. –

+0

Zobacz moje inne komentarze, ale konkretnie pojedynczy test POST, który przesyła zarówno plik, jak i niektóre parametry POST (np. Token uwierzytelniania pojedynczego w tym przypadku). – Greg

Odpowiedz

1

to najlepsza odpowiedź mógłbym określić dotąd:

Here's a link Okazało się, że zbliża się do tego, co miał na myśli. To rozwiązuje mój konkretny wymóg, jednak nie wydaje się zbyt szerokie pod względem metod. Być może są to tylko kluczowe metody pomocnicze, które są wymagane głównie powyżej/poza podstawowymi klasami WebClient/HttpWebRequest? W każdym razie, jeśli ktoś wie o popularnej bibliotece C# HTTP jest lepiej znany, proszę dać mi znać. Na razie ten link jest najlepszy, jaki mogę znaleźć, aby odpowiedzieć na moje pytania. Dzięki za wszystkie dotychczasowe komentarze.

2

Szukasz biblioteki Ajax, kontrola przesyłania plików, lub obu, albo nie? Sprawdź kod AjaxToolkit: AsyncFileUpload.

+0

Więcej ogólnie znanej/popularnej biblioteki http utils, stąd powiem obaj domyślam się na twoje pytanie – Greg

+0

przegląd słów sugeruje jego "AsyncFileUpload jest formantem ASP.NET AJAX" - tak w tym przypadku domyślam się, że to nie jest tak naprawdę samodzielna biblioteka, która mogłaby być użyta w rozwoju WinForms wtedy? – Greg

+0

WinFormy? Myślę, że masz na myśli asp.net? Wspomniałeś o HTTP i httpwebrequest w tytule? AjaxToolkit współpracuje z .Net, więc pod tym względem nie jest "samodzielny". Ale nie potrzebujesz niczego więcej, aby go użyć. – cdonner

3

WebClient będzie zrobić. Podobnych:

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

Jeśli to nie wystarczy, bardziej szczegółowe. Jakie "parametry" masz na myśli?

+0

Zwykłe parametry post postu – Greg

+0

Henk, czy WebClinet() obsługuje HTTPS przy użyciu SSL? Tak jak jeśli chcę ServicePointManager.ServerCertificateValidationCallback + = new System.Net.Security.RemoteCertificateValidationCallback (ValidateServerCertificate); – Sunil

13

formularze są składane w jednym z dwóch formatów: application/x-www-form-urlencoded i multipart/form-data.

WebClient zapewnia bardzo prosty i wygodny sposób przesyłania dowolnych danych do witryny internetowej. W przypadku aplikacji /x-www-form-urlencoded wszystko, co musisz zrobić, to dostarczyć NameValueCollection. W przypadku , wieloczęściowego/formularza danych, AFAIK, musisz sam utworzyć dane żądania (które mogą zawierać zarówno pliki, jak i pary wartości nazw).


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 ustawia metodę HTTP do "POST" i Content-Type do "application/x-www-form-urlencoded", URL-koduje formData i przesyłanie go do podaną 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); 

Ustawia Content-Type do "multipart/form-data" z granicy stosowanych w danych żądania. WebClient.UploadData ustawia metodę HTTP na "POST" i przesyła tablicę bajtów do uriString. Dane żądania w tym przykładzie zawierają plik file1.dat i parametr formularza submit-name, który jest ustawiony na Larry. Format jest opisany w RFC2388.

+0

Umm ... co powiesz na konkretny przypadek, w którym muszę przesłać plik, ale w ramach tego samego testu POST muszę podać niektóre parametry formularza? Czy WebClient może sobie z tym poradzić? Dzięki – Greg

+0

* multipart/form-data * jest twoim przyjacielem. – dtb

+0

Dzięki - Wspaniale jest teraz wiedzieć. Przypuszczam, że wracając do mojego pytania, czy istnieje popularna biblioteka, która hermetyzuje funkcje http takie jak ta? Np. W tym przypadku wystarczy przekazać nazwy plików i pary wartości kluczy ... – Greg

0

Składniki Chilkat

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"; 
} 
Powiązane problemy