HttpClient与HttpListener

        /// <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");
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双叶红于二月花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值