代码改变世界

自定义Http请求头并且获取

2018-04-03 17:42  糯米粥  阅读(27223)  评论(2编辑  收藏  举报

在一些开发需求中。我们需要把一些信息放到Http请求头中。比如我需要把签名信息 signature 放到Http请求头

所以就需要自定义请求头 signature ,用webClient发起请求

我这里仅仅是演示怎么添加 以及怎么获取

创建一个控制台程序,编写如下代码:

 public static string APIPostBack(string url, string posts, string contentType)
        {
            byte[] postData = Encoding.UTF8.GetBytes(posts);
            WebClient client = new WebClient();

            client.Headers.Add("Content-Type", contentType);
            client.Headers.Add("ContentLength", postData.Length.ToString());
            client.Headers.Add("signature", "87&66x@@50w5o6XdPvzRFz7nR0");
            
            byte[] responseData = null;
            string result = "";
            try
            {
                responseData = client.UploadData(url, "POST", postData);
                result = Encoding.UTF8.GetString(responseData);
            }
            catch (Exception ex)
            {
            }
            client.Dispose();
            return result;
        }

调用

 string url = "http://localhost:51484/index.aspx";
 APIPostBack(url, "请求报文", "application/json");

 

  当然。我这里事先知道了这个url。所以这里写死了

index.aspx 的page_Load页面

protected void Page_Load(object sender, EventArgs e)
        {
  //命名空间 System.Collections.Specialized;
            NameValueCollection myHeader = new NameValueCollection();
            int i;
            string strKey;
            myHeader = Request.Headers;

            int total = myHeader.Count;
            string strResult = "";
            //获取header里的signature参数的值
            for (i = 0; i < total; i++)
            {
                strKey = myHeader.GetKey(i);
                if (strKey == "signature")
                {
                    strResult = myHeader.Get(strKey);

                }
            }

            //获取请求报文,这里是演示
            string reqStr = string.Empty;
            using (Stream s = Request.InputStream)
            {
                using (StreamReader reader = new StreamReader(s, Encoding.UTF8))
                {
                    reqStr = reader.ReadToEnd();
                }
            }
        }

 

1:然后先调试起 index.aspx页面

2:在请求的控制台项目上,调试--》启用新实例

 

 

这里在index就收到了请求http的signature 值

 

以及请求报文,如果获取的是json只需要反序列化即可

 

其实可以直接这样获取

string signature = myHeader.Get("signature");

 

 

 

另外。Js是不能处理Http请求的。因为js是前端脚本。如果js能处理Http

那么用户登录都用的post就没有安全可言了。用户名和密码都被截取到。

不过js可以获取Respose的Head信息,代码来源网络!

$.ajax({
            type: 'HEAD', // 获取头信息,type=HEAD即可
            //url: window.location.href,
            url:"http://device.qq.com/cgi-bin/device_cgi/remote_bind_get_Verify",
            complete: function (xhr, data) {
                // 获取相关Http Response header
                return;
                var wpoInfo = {
                    // 服务器端时间
                    "date": xhr.getResponseHeader('Date'),
                    // 如果开启了gzip,会返回这个东西
                    "contentEncoding": xhr.getResponseHeader('Content-Encoding'),
                    // keep-alive ? close?
                    "connection": xhr.getResponseHeader('Connection'),
                    // 响应长度
                    "contentLength": xhr.getResponseHeader('content-length'),
                    // 服务器类型,apache?lighttpd?
                    "server": xhr.getResponseHeader('Server'),
                    "vary": xhr.getResponseHeader('Vary'),
                    "transferEncoding": xhr.getResponseHeader('Transfer-Encoding'),
                    // text/html ? text/xml?
                    "contentType": xhr.getResponseHeader('Content-Type'),
                    "cacheControl": xhr.getResponseHeader('Cache-Control'),
                    // 生命周期?
                    "exprires": xhr.getResponseHeader('Exprires'),
                    "lastModified": xhr.getResponseHeader('Last-Modified'),
                };
                console.log(xhr.getAllResponseHeaders());
                alert(xhr.getResponseHeader('Last-Modified'));
            }
        });