• HTTP BASIC client端


    不同于之前的HttpWebRequest类型,在.NET 4.5中新的HttpRequestHeaders类型直接有一个Authorization属性,对应类型是:AuthenticationHeaderValue,同样在System.Net.Http.Headers命名空间内。AuthenticationHeaderValue有两个属性Parameter和Scheme。为了弄清这两个参数在对Authorization属性的作用,我们可以做一个简单的测试:

    首先得记得加入.NET 4.5中HttpClient相应的命名空间:

    //+ using System.Net.Http;

    //+ using System.Net.Http.Headers;

     

    接着在DefaultRequestHeaders中设置AuthenticationHeaderValue,然后输出Authorization的值:

    using (var http = new HttpClient())

    {

        http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Mgen", "Orca");

        //通过HttpHeaders.GetValues获取值

        Console.WriteLine(String.Join(", ", http.DefaultRequestHeaders.GetValues("Authorization")));

    }

     

    输出:

    Mgen Orca

     

    原来Authorization属性会被设置成Scheme<空格>Parameter。

     

    因此对于Basic验证,可以使用这样的方法来设置:

    static async void doo()

    {

        using (var http = new HttpClient())

        {

            SetBasicAuthorization(http.DefaultRequestHeaders, "mgen", "123456", Encoding.UTF8);

     

            //后续操作省略

        }

    }

     

    static void SetBasicAuthorization(HttpRequestHeaders header, string user, string pass, Encoding encoding)

    {

        //Base64编码

        var data = Convert.ToBase64String(encoding.GetBytes(user + ":" + pass));

        //设置AuthenticationHeaderValue

        header.Authorization = new AuthenticationHeaderValue("Basic", data);

    }

     

    上面是通过设置AuthenticationHeaderValue的。当然.NET中的HttpRequestHeader同样允许直接修改原始的HTTP头数据,通过HttpRequestHeader.Add方法,当然这样很像.NET 4.5前的HttpWebRequest的设置方式:

    static void SetBasicAuthorization(HttpRequestHeaders header, string user, string pass, Encoding encoding)

    {

        //Base64编码

        var data = Convert.ToBase64String(encoding.GetBytes(user + ":" + pass));

        //通过HttpRequestHeaders.Add

        header.Add("Authorization", "Basic " + data);

    }

     

    上述都会正确设置HTTP请求头的Authorization字段为Basic验证方式。

  • 相关阅读:
    c++ 析构函数
    define 全局变量 extern
    C 与 python 的随机数
    WinMain function can not be oveloaderd
    宽字符编码与多字节编码
    windows 静态库 与 动态库
    extern C 语言中
    ubuntu 修改分辨率 , 虚拟机中的ubuntu联网
    main(int argv, char* argc[])
    数字分隔符,三位一个逗号
  • 原文地址:https://www.cnblogs.com/fx2008/p/2819623.html
Copyright © 2020-2023  润新知