HTTP clients
Reading GET response as string using System.Net.HttpClient
Section titled “Reading GET response as string using System.Net.HttpClient”HttpClient is available through NuGet: Microsoft HTTP Client Libraries.
string requestUri = "http://www.example.com";string responseData;
using (var client = new HttpClient()){ using(var response = client.GetAsync(requestUri).Result) { response.EnsureSuccessStatusCode(); responseData = response.Content.ReadAsStringAsync().Result; }}Basic HTTP downloader using System.Net.Http.HttpClient
Section titled “Basic HTTP downloader using System.Net.Http.HttpClient”using System;using System.IO;using System.Linq;using System.Net.Http;using System.Threading.Tasks;
class HttpGet{ private static async Task DownloadAsync(string fromUrl, string toFile) { using (var fileStream = File.OpenWrite(toFile)) { using (var httpClient = new HttpClient()) { Console.WriteLine("Connecting..."); using (var networkStream = await httpClient.GetStreamAsync(fromUrl)) { Console.WriteLine("Downloading..."); await networkStream.CopyToAsync(fileStream); await fileStream.FlushAsync(); } } } }
static void Main(string[] args) { try { Run(args).Wait(); } catch (Exception ex) { if (ex is AggregateException) ex = ((AggregateException)ex).Flatten().InnerExceptions.First();
Console.WriteLine("--- Error: " + (ex.InnerException?.Message ?? ex.Message)); } } static async Task Run(string[] args) { if (args.Length < 2) { Console.WriteLine("Basic HTTP downloader"); Console.WriteLine(); Console.WriteLine("Usage: httpget <url>[<:port>] <file>"); return; }
await DownloadAsync(fromUrl: args[0], toFile: args[1]);
Console.WriteLine("Done!"); }}Reading GET response as string using System.Net.HttpWebRequest
Section titled “Reading GET response as string using System.Net.HttpWebRequest”string requestUri = "http://www.example.com";string responseData;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(parameters.Uri);WebResponse response = request.GetResponse();
using (StreamReader responseReader = new StreamReader(response.GetResponseStream())){ responseData = responseReader.ReadToEnd();}Reading GET response as string using System.Net.WebClient
Section titled “Reading GET response as string using System.Net.WebClient”string requestUri = "http://www.example.com";string responseData;
using (var client = new WebClient()){ responseData = client.DownloadString(requestUri);}Sending a POST request with a string payload using System.Net.HttpWebRequest
Section titled “Sending a POST request with a string payload using System.Net.HttpWebRequest”string requestUri = "http://www.example.com";string requestBodyString = "Request body string.";string contentType = "text/plain";string requestMethod = "POST";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri){ Method = requestMethod, ContentType = contentType,};
byte[] bytes = Encoding.UTF8.GetBytes(requestBodyString);Stream stream = request.GetRequestStream();stream.Write(bytes, 0, bytes.Length);stream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();Sending a POST request with a string payload using System.Net.WebClient
Section titled “Sending a POST request with a string payload using System.Net.WebClient”string requestUri = "http://www.example.com";string requestBodyString = "Request body string.";string contentType = "text/plain";string requestMethod = "POST";
byte[] responseBody;byte[] requestBodyBytes = Encoding.UTF8.GetBytes(requestBodyString);
using (var client = new WebClient()){ client.Headers[HttpRequestHeader.ContentType] = contentType; responseBody = client.UploadData(requestUri, requestMethod, requestBodyBytes);}Sending a POST request with a string payload using System.Net.HttpClient
Section titled “Sending a POST request with a string payload using System.Net.HttpClient”HttpClient is available through NuGet: Microsoft HTTP Client Libraries.
string requestUri = "http://www.example.com";string requestBodyString = "Request body string.";string contentType = "text/plain";string requestMethod = "POST";
var request = new HttpRequestMessage{ RequestUri = requestUri, Method = requestMethod,};
byte[] requestBodyBytes = Encoding.UTF8.GetBytes(requestBodyString);request.Content = new ByteArrayContent(requestBodyBytes);
request.Content.Headers.ContentType = new MediaTypeHeaderValue(contentType);
HttpResponseMessage result = client.SendAsync(request).Result;result.EnsureSuccessStatusCode();Remarks
Section titled “Remarks”The currently relevant HTTP/1.1 RFCs are:
- 7230: Message Syntax and Routing
- 7231: Semantics and Content
- 7232: Conditional Requests
- 7233: Range Requests
- 7234: Caching
- 7235: Authenticaion
- 7239: Forwarded HTTP Extension
- 7240: Prefer Header for HTTP
There’s also the following informational RFCs:
And the experimental RFC:
Related protocols: