xNet - C # рд╡реЗрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдзреАрд░реЗ-рдзреАрд░реЗ, C # рдФрд░ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд╕рд╛рде , рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬреЛ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдХреЙрд▓ рдХреЗ рдкреАрдЫреЗ рд░реВрдЯ рдХреЛрдб рдЫрд┐рдкрд╛рддреЗ рдереЗред рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдЖрдкрд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рддреЛ xNet рдХреНрдпрд╛ рд╣реИ?


.NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП xNet рдПрдХ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


рдбрд╛рдЙрдирд▓реЛрдб: рд╡рд┐рдЬреНрдЮрдкреНрддрд┐
рд╕реНрд░реЛрдд: github.com/X-rus/xNet

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд▓реЗрдЦ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдВрддрд┐рдо рдЕрджреНрдпрддрди 09/12/2015

рдореВрд▓ рдмрд╛рддреЗрдВ


HttpRequest рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╣реЗрдбрд░, рдЯрд╛рдЗрдордЖрдЙрдЯ, рдлрд╝реЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрд╢рди рдФрд░ рдЕрдиреНрдп рдХреЛ рд░рдЦрдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЬрдм рдЖрдк рдПрдХ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдкрд╣рд▓реЗ HttpResponse рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рд╕рдВрджреЗрд╢ рдмреЙрдбреА рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХреЗрдВред рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рдп рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреБрд░реЛрдз рдЙрджрд╛рд╣рд░рдг:
using (var request = new HttpRequest()) { request.UserAgent = Http.ChromeUserAgent(); //  . HttpResponse response = request.Get("habrahabr.ru"); //      . string content = response.ToString(); } 

рд╕рд░реНрд╡рд░ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк HttpRequest.Close рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк HttpRequest.Response рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HttpResponse рдХрд╛ рд▓рд┐рдВрдХ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реМрдЯреЗ HttpResponse рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ HttpRequest рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ HttpResponse рд╣реИ (рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдпрд╣ рдЕрдиреБрд░реЛрдз рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ
 GET / HTTP/1.1 Host: habrahabr.ru Connection: keep-alive Accept-Encoding: gzip,deflate User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17 


рд╕рд░рд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдФрд░ рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рдп рд▓реЛрдб рдХрд░рдирд╛


рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
 using (var request = new HttpRequest()) { var urlParams = new RequestParams(); urlParams["param1"] = "val1"; urlParams["param2"] = "val2"; string content = request.Get("habrahabr.ru", urlParams).ToString(); } 

URL рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RequestParams рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
 Get("habrahabr.ru/?param1=val1&param2=val2") 


рдЖрдк HttpRequest.AddUrlParam рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ URL рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрд╕реНрдерд╛рдпреА URL рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
 using (var request = new HttpRequest()) { request.AddUrlParam("param1", "val1").AddUrlParam("param2", "val2"); string content = request.Get("habrahabr.ru").ToString(); } 


POST рдЕрдиреБрд░реЛрдз рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 using (var request = new HttpRequest()) { var reqParams = new RequestParams(); reqParams["login"] = "neo"; reqParams["password"] = "knockknock"; string content = request.Post( "www.whitehouse.gov", reqParams).ToString(); } 


рдЖрдк HttpRequest.AddParam рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрд╕реНрдерд╛рдпреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде POST рдЕрдиреБрд░реЛрдз рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 using (var request = new HttpRequest()) { request.AddParam("login", "neo").AddParam("password", "knockknock"); string content = request.Post("www.whitehouse.gov").ToString(); } 


рддреБрдо рднреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА, рдПрдХ рдлрд╝рд╛рдЗрд▓, рдпрд╛ HttpContent рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╛рдВрдЪ HttpResponse рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢ рд╢рд░реАрд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: ToString , ToBytes , ToFile , ToStream рдпрд╛ ToMemoryStream ред рдпрджрд┐ рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдПрдирдХреЛрдбрд┐рдВрдЧ рд╣реЛ, рддреЛ, 1251 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдХрд╣реЗрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ HttpRequest.CharacterSet = Encoding.GetEncoding (1251)

рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ / рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛


рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ / рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MultipartContent рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ / рдлреЙрд░реНрдо рдЕрдиреБрд░реЛрдз рдЙрджрд╛рд╣рд░рдг:
 using (var request = new HttpRequest()) { var multipartContent = new MultipartContent() { {new StringContent("Bill Gates"), "login"}, {new StringContent("qwerthahaha"), "password"}, {new FileContent(@"C:\windows_9_alpha.rar"), "file1", "1.rar"} }; request.Post("www.microsoft.com", multipartContent).None(); } 


рд╕реНрд╡рдпрдВ MultipartContent рд╡рд░реНрдЧ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рджреЛ рд╡рд┐рд╢реЗрд╖ HttpRequest рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: AddField рдФрд░ AddFile ред рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рдордп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ / рдлреЙрд░реНрдо рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
 using (var request = new HttpRequest()) { request .AddField("login", "Bill Gates") .AddField("password", "qwerthahaha") .AddFile("file1", @"C:\windows_9_alpha.rar"); request.Post("www.microsoft.com").None(); } 


рд╕реНрдерд╛рдпреА рд╕рдВрдмрдВрдз рдФрд░ рд╕рд╛рдордВрдЬрд╕реНрдп


HttpRequest рд▓рдЧрд╛рддрд╛рд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ HttpRequest.KeepAlive рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 using (var request = new HttpRequest("habrahabr.ru")) { request.Get("/").None(); request.Get("/feed").None(); request.Get("/feed/posts"); } 

рд╕рднреА рддреАрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╕рд░реНрд╡рд░ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдореЗрдВ, рдореИрдВ рдХреЛрдИ рднреА рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реВрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рд╢рд░реАрд░ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рд╣реИ, рдЖрдк рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рдп рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдХрдиреЗрдХреНрд╢рди рдЕрднреА рднреА рдмрдВрдж рд░рд╣реЗрдЧрд╛ред

рдереЛрдбрд╝рд╛ рдФрд░ рдХреЛрдИ рдирд╣реАрдВ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрджрд┐ рд▓рдЧрд╛рддрд╛рд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдЦреБрдж рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред HttpRequest рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдХреЗ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд░реАрдХрдиреЗрдХреНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ)ред рдпрджрд┐ рдпрд╣ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред рд▓рдЧрд╛рддрд╛рд░ рдХрдиреЗрдХреНрд╢рди рдХреА рдорд╣реАрди рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдк KeepAliveTimeout рдФрд░ рдореИрдХреНрд╕рд┐рдордХрдХреНрд▓рд╛рдЗрд╡реИрд▓рд░рд┐рд╕реЗрдкреНрд╕ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЖрдк Reconnect , ReconnectLimit рдФрд░ ReconnectDelay рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдХреНрд╖рдо рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдпрд╛ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб / рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ HttpRequest рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╢ рдмреЙрдбреА рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп (ToString () рд╡рд┐рдзрд┐ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдкреБрдирд░рд╛рд╡рд░реНрддрди рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрд╕реНрдерд┐рд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рд╣реИ, рддреЛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдХреАрдЬрд╝, рд╣реЗрдбрд░ рдФрд░ рдЕрдзрд┐рдХ рд╕реЗрдЯ рдХрд░реЗрдВ


рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреБрдЫ рд╣реЗрдбрд░ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХреА рд╕реВрдЪреА рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЗрдбрд░ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╢реАрд░реНрд╖ рд▓реЗрдЦ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ HttpRequest.AddHeader рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдРрд╕реЗ рд╣реЗрдбрд░ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЗрдбрд░ рдХреЛ рдУрд╡рд░рд▓реИрдк рдХрд░рддреЗ рд╣реИрдВред

рдХреБрдХреАрдЬрд╝ HttpRequest.Cookies рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИрдВред рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдХреАрдЬрд╝ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдХреАрдХреА рдХреАрдордд рдорд╛рди рд▓реЗрдВ ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 using (var request = new HttpRequest("habrahabr.ru")) { request.Cookies = new CookieDictionary() { {"hash", "yrttsumi"}, {"super-hash", "df56ghd"} }; request[HttpHeader.DNT] = "1"; request["X-Secret-Param"] = "UFO"; request.AddHeader("X-Tmp-Secret-Param", "42"); request.AddHeader(HttpHeader.Referer, "http://site.com"); request.Get("/"); } 


HttpRequest рдФрд░ HttpResponse рдореЗрдВ рдХреБрдХреАрдЬрд╝ рдФрд░ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рд╣реИрдВ: ContainsHeader , EnumerateHeaders , ClearAllHeaders , ContainsCookie , ContainsRawCookie рдФрд░ рдЕрдиреНрдпред

рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдПрдЬреЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ Http рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: IEUserAgent , OperaUserAgent , ChromeUserAgent , FirefoxUserAgent рдпрд╛ OperaMiniUserAgent ред
рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреВрдЫреЗрдВ:
 request.UserAgent = Http.ChromeUserAgent(); 


рдПрдХ рд░реИрдВрдбрдордпреВрдЬрд░рдПрдЬреЗрдВрдЯ рд╡рд┐рдзрд┐ рд╣реБрдЖ рдХрд░рддреА рдереА, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдбрд┐рд▓реАрдЯ рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ Google Chrome рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдЗрдЯ рдПрдХ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди IE рдХреЗ рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

HttpRequest рдореЗрдВ рдХрдИ рдФрд░ рдЧреБрдг рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реАрд░реНрд╖ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗрдЦреЗрдВред

рдкреНрд░реЙрдХреНрд╕реА рдХрдиреЗрдХреНрд╢рди


xNet рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:

рдЗрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ ProxyClient рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ ред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдЧ ChainProxyClient рд╣реИ , рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 var proxyClient = HttpProxyClient.Parse("127.0.0.1:8080"); var tcpClient = proxyClient.CreateConnection("habrahabr.ru", 80); //    . 


HttpRequest рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HttpRequest.Proxy рдЧреБрдг рд╕реЗрдЯ рдХрд░реЗрдВред

рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


рдпрджрд┐ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдХ HttpException рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрджрд┐ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрди рджреЛрдиреЛрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ NetException рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 try { using (var request = new HttpRequest()) { request.Proxy = Socks5ProxyClient.Parse("127.0.0.1:1080"); request.Get("habrahabr.ru"); } } catch (HttpException ex) { Console.WriteLine("     HTTP-: {0}", ex.Message); switch (ex.Status) { case HttpExceptionStatus.Other: Console.WriteLine(" "); break; case HttpExceptionStatus.ProtocolError: Console.WriteLine(" : {0}", (int)ex.HttpStatusCode); break; case HttpExceptionStatus.ConnectFailure: Console.WriteLine("    HTTP-."); break; case HttpExceptionStatus.SendFailure: Console.WriteLine("    HTTP-."); break; case HttpExceptionStatus.ReceiveFailure: Console.WriteLine("     HTTP-."); break; } } 


рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдХреНрд╖рд╛рдПрдВ


WinInet рд╡рд░реНрдЧ рдЖрдкрдХреЛ рд╡рд┐рдВрдбреЛрдЬ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ рдпрд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдЪрдЯреАрдПрдордПрд▓ рдХреНрд▓рд╛рд╕ рдХреЛ HTML рдФрд░ рдЕрдиреНрдп рдЯреЗрдХреНрд╕реНрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдкрд╛рда рдореЗрдВ HTML рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЙрди рд╡рд░реНрдгреЛрдВ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг: & _quot; рдкрд░реАрдХреНрд╖рдг & _quot; "рдкрд░реАрдХреНрд╖рдг" рдореЗрдВред рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛ рдпреВрдирд┐рдХреЛрдб рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЙрди рд╡рд░реНрдгреЛрдВ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг: \ u2320 рдпрд╛ \ U044Fред рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ: рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ, рд▓рд╛рд╕реНрдЯрд╕реБрдмрд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧред

рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ


Source: https://habr.com/ru/post/In146475/


All Articles