自定义Http请求头并且获取
2018-04-03 17:42 糯米粥 阅读(27293) 评论(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')); } });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?