Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharpNotesForProfessionals.pdf
Скачиваний:
57
Добавлен:
20.05.2023
Размер:
6.12 Mб
Скачать

Chapter 99: Performing HTTP requests

Section 99.1: Creating and sending an HTTP POST request

using System.Net; using System.IO;

...

string requestUrl = "https://www.example.com/submit.html"; HttpWebRequest request = HttpWebRequest.CreateHttp(requestUrl); request.Method = "POST";

// Optionally, set properties of the HttpWebRequest, such as: request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; request.ContentType = "application/x-www-form-urlencoded";

//Could also set other HTTP headers such as Request.UserAgent, Request.Referer,

//Request.Accept, or other headers via the Request.Headers collection.

//Set the POST request body data. In this example, the POST data is in

//application/x-www-form-urlencoded format.

string postData = "myparam1=myvalue1&myparam2=myvalue2";

using (var writer = new StreamWriter(request.GetRequestStream()))

{

writer.Write(postData);

}

// Submit the request, and get the response body from the remote server. string responseFromRemoteServer;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())

{

using (StreamReader reader = new StreamReader(response.GetResponseStream()))

{

responseFromRemoteServer = reader.ReadToEnd();

}

}

Section 99.2: Creating and sending an HTTP GET request

using System.Net; using System.IO;

...

string requestUrl = "https://www.example.com/page.html"; HttpWebRequest request = HttpWebRequest.CreateHttp(requestUrl);

// Optionally, set properties of the HttpWebRequest, such as: request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; request.Timeout = 2 * 60 * 1000; // 2 minutes, in milliseconds

// Submit the request, and get the response body. string responseBodyFromRemoteServer;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())

{

using (StreamReader reader = new StreamReader(response.GetResponseStream()))

{

responseBodyFromRemoteServer = reader.ReadToEnd();

}

GoalKicker.com – C# Notes for Professionals

536

}

Section 99.3: Error handling of specific HTTP response codes (such as 404 Not Found)

using System.Net;

...

string serverResponse; try

{

// Call a method that performs an HTTP request (per the above examples). serverResponse = PerformHttpRequest();

}

catch (WebException ex)

{

if (ex.Status == WebExceptionStatus.ProtocolError)

{

HttpWebResponse response = ex.Response as HttpWebResponse; if (response != null)

{

if ((int)response.StatusCode == 404) // Not Found

{

//Handle the 404 Not Found error

//...

}

else

{

//Could handle other response.StatusCode values here.

//...

}

}

}

else

{

//Could handle other error conditions here, such as WebExceptionStatus.ConnectFailure.

//...

}

}

Section 99.4: Retrieve HTML for Web Page (Simple)

string contents = "";

string url = "http://msdn.microsoft.com";

using (System.Net.WebClient client = new System.Net.WebClient())

{

contents = client.DownloadString(url);

}

Console.WriteLine(contents);

Section 99.5: Sending asynchronous HTTP POST request with JSON body

public static async Task PostAsync(this Uri uri, object value)

{

GoalKicker.com – C# Notes for Professionals

537

var content = new ObjectContext(value.GetType(), value, new JsonMediaTypeFormatter());

using (var client = new HttpClient())

{

return await client.PostAsync(uri, content);

}

}

. . .

var uri = new Uri("http://stackoverflow.com/documentation/c%23/1971/performing-http-requests"); await uri.PostAsync(new { foo = 123.45, bar = "Richard Feynman" });

GoalKicker.com – C# Notes for Professionals

538