zoukankan      html  css  js  c++  java
  • HttpClient 使用

    Api支持

    HttpClient 是基于Task的异步方法组,支持取消、超时异步特性,其可以分类为以下:

    Restful: GetAsync,PostAsync,DeleteAsync,PutAsync

    HttpHeaders属性:DefaultRequestHeaders

    Timeout属性:Timeout,相比HttpRequest的参数,更加地智能,用TimeSpan替换了int。

    Get扩展(本质上是封装了GetAsync()):GetStringAsync,GetStreamAsync,

    GetByteArrayAsync

    SendAsync:Restful的实现应该是封装了此方法。需要一个HttpRequestMessage作为参数。

    HttpContent

    使用post方式请求示例:

    
    public static async Task<string> CreateUrlAsync(string url, Dictionary<string, string> parameters, string accessToken, int timeount = 10)
    {
        HttpClient httpClient = new HttpClient(new MyHttpClientHandlerProxy(accessToken));
        httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
        httpClient.Timeout = TimeSpan.FromSeconds(timeount);
    
        FormUrlEncodedContent content = new FormUrlEncodedContent(parameters);
        var response = await httpClient.PostAsync(url, content);
        var str = await response.Content.ReadAsStringAsync();
    
        return str;
    }
    

    其他的Content类型:

    StreamContent,StringContent,MutilpartContent,MultipartFormDataContent

    HttpClientHandler

    作为一个代理角色,可以支持自定义的处理方式。

    public class MyHttpClientHandlerProxy : HttpClientHandler
    {
        private string accessToken;
        public MyHttpClientHandlerProxy(string accessToken)
        {
            this.accessToken = accessToken;
        }
    
        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            //处理Headers
            request.Headers.Referrer = new Uri("www.imctf.com");
            request.Headers.Add("Authorization", "Bearer " + accessToken);
            request.Headers.Add("UserAgent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727)");
    
            //执行
            var response = await base.SendAsync(request, cancellationToken);
    
            //处理编码
            var contentType = response.Content.Headers.ContentType;
            if (string.IsNullOrEmpty(contentType.CharSet))
            {
                contentType.CharSet = "GBK";
            }
    
            return response;
        }
    }
    

    使用:

    HttpClient httpClient = new HttpClient(new MyHttpClientHandlerProxy(accessToken));
    
  • 相关阅读:
    第一章 快速入门
    增量式PID控制算法
    第二章 变量和基本类型
    位置式PID和增量式PID区别?
    I2C
    Linux系统进程调用列表
    Linux下I/O模型
    Linux下多路复用接口
    新浪博客网页编辑器PHP版带有上传图片功能
    晕死!博客园把我搞晕了!
  • 原文地址:https://www.cnblogs.com/pengzhen/p/5784804.html
Copyright © 2011-2022 走看看