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));
    
  • 相关阅读:
    HEVC软件记录
    怪诞行为学
    docker学习实践之路[第一站]环境安装
    centos系统(ssh)登录缓慢(输入账户密码后需要等待若干时间)
    CentOS7.x编译安装nginx,实现HTTP2
    vs 2017 IIS EXPRESS 增加局域网访问
    nginx在centos 7中源码编译安装【添加grpc的支持】
    docker学习实践之路[第五站]mysql镜像应用
    docker学习实践之路[第四站]利用pm2镜像部署node应用
    docker学习实践之路[第三站]node站点部署
  • 原文地址:https://www.cnblogs.com/pengzhen/p/5784804.html
Copyright © 2011-2022 走看看