自定义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')); } });