/// <summary>
/// 获取http主体请求对应的主体消息
/// </summary>
/// <returns></returns>
public static async Task GetDataAdvancedAsync()
{
using (var client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Get, "请求地址");
HttpResponseMessage response = await client.SendAsync(request);
string message = await response.Content.ReadAsStringAsync();
Console.WriteLine(message);
}
}
/// <summary>
/// 设置头部 并请求post主体信息
/// </summary>
/// <returns></returns>
public static async Task GetDataWithHeadersAsync()
{
try
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
ShowHeaders("Request Headers:", client.DefaultRequestHeaders);
HttpContent content = new FormUrlEncodedContent(new Dictionary<string, string>()
{
{ "key","value"}
});
HttpResponseMessage response = await client.PostAsync("请求地址", content);
response.EnsureSuccessStatusCode();
ShowHeaders("Response Headers:", response.Headers);
string responseBodyAsText = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBodyAsText);
}
}
catch (Exception ex)
{
throw;
}
}
internal class SampleMessageHandler : HttpClientHandler
{
private string _message;
public SampleMessageHandler(string message)
{
this._message = message;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
System.Console.WriteLine($"In SampleMessageHandler {_message}");
if (_message == "error")
{
var response = new HttpResponseMessage(HttpStatusCode.BadRequest);
return Task.FromResult<HttpResponseMessage>(response);
}
return base.SendAsync(request, cancellationToken);
}
}
/// <summary>
/// 自定义请求
/// </summary>
/// <returns></returns>
public static async Task GetDataWithMessageHandlerAsync()
{
var client = new HttpClient(new SampleMessageHandler("error"));
try
{
HttpResponseMessage response = await client.GetAsync("请求地址");
response.EnsureSuccessStatusCode();
string result = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
throw;
}
}
/// <summary>
/// 请求案例信息
/// </summary>
/// <returns></returns>
private static async Task GetDataSimpleAsync()
{
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync("请求地址");
if (response.IsSuccessStatusCode)
{
Console.WriteLine($"Response Status Code:{(int)response.StatusCode} {response.ReasonPhrase}");
string responseBodyAsText = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Received payload of {responseBodyAsText.Length} characters");
Console.WriteLine();
Console.WriteLine(responseBodyAsText);
}
}
}
/// <summary>
/// 请求如果错误抛出异常
/// </summary>
/// <returns></returns>
private static async Task GetDataWithExceptionAsync()
{
try
{
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync("错误地址");
response.EnsureSuccessStatusCode();
Console.WriteLine($"Response Status Code:{(int)response.StatusCode} {response.ReasonPhrase}");
string responseBodyAsText = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Received payload of {responseBodyAsText.Length} characters");
}
}
catch (Exception ex)
{
throw;
}
}
http监听
public class CustomListener
{
static HttpListener listener;
public static async Task StartServerAsync()
{
listener = new HttpListener();
//定义url及端口号,通常设置为配置文件
listener.Prefixes.Add("http://127.0.0.1:62914/");
//启动监听器
listener.Start();
// 异步监听客户端请求,当客户端的网络请求到来时会自动执行Result委托 可通过IAsyncResult接口的参数获取context对象
listener.BeginGetContext(AsyncResult, null);
Console.WriteLine($"等待客户端请求,时间:{DateTime.Now.ToString()}\r\n");
}
private static void AsyncResult(IAsyncResult ar)
{
listener.BeginGetContext(AsyncResult, null);
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine($"接到新的请求时间:{DateTime.Now.ToString()}");
var endContext = listener.EndGetContext(ar);
var request = endContext.Request;
var response = endContext.Response;
endContext.Response.ContentType = "application/json;charset=UTF-8";
endContext.Response.AddHeader("Content-type", "application/json");
string retResult = null;//定义返回客户端的信息
if (request.HttpMethod == "GET" && request.InputStream != null)
{
var byteStream = new byte[2048];
int num = request.InputStream.Read(byteStream, 0, byteStream.Length);
retResult = Encoding.UTF8.GetString(byteStream.ToArray(), 0, num);
response.StatusDescription = "OK";
response.StatusCode = (int)HttpStatusCode.OK;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"接收数据完成:{retResult},时间:{DateTime.Now.ToString()}");
}
var returnByteArr = Encoding.UTF8.GetBytes(retResult);//设置客户端返回信息的编码
using (var stream = response.OutputStream)
{
//把处理信息返回到客户端
stream.Write(returnByteArr, 0, returnByteArr.Length);
}
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"完成请求时间:{ DateTime.Now.ToString()}\r\n");
}