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));
    
  • 相关阅读:
    javascript获取当前url
    外贸电子商务网站之Prestashop 安装后台中文语言包
    外贸电子商务网站之Prestashop paypal支付添加
    外贸电子商务网站之Prestashop 语言包安装
    PHPCMS快速建站系列之邮箱验证
    display: none;、visibility: hidden、opacity=0区别总结
    facebook第三方登录
    PHPCMS V9静态化HTML生成设置及URL规则优化
    Phpcms V9全站伪静态设置方法
    MySQL命令输入错误 取消命令
  • 原文地址:https://www.cnblogs.com/pengzhen/p/5784804.html
Copyright © 2011-2022 走看看