VFP9使用MSXML2.XMLHTTP时能否获取含请求头的完整发送JSON报文?
VFP9 获取MSXML2.XMLHTTP完整请求内容的实现方法
该需求完全可以实现,具体可通过以下两种方案落地:
方案一:代码层面直接采集(无需额外工具)
MSXML2.XMLHTTP 组件本身没有直接获取全部请求头的原生方法,你可以选择对代码做极小改动实现需求:
- 原有调用
setRequestHeader()自定义的请求头,可在调用send()方法前统一存入变量留痕,结合你已经拿到的send报文数据,即可拼接出绝大部分请求内容 - 如果需要获取组件自动生成的标准请求头(如
Content-Length、Host、Connection等),可将MSXML2.XMLHTTP替换为用法高度兼容的WinHttp.WinHttpRequest.5.1组件,该组件自带GetAllRequestHeaders()方法可直接返回所有请求头内容。
示例代码如下:
* 初始化请求对象,用法和MSXML2.XMLHTTP基本一致 loReq = CreateObject("WinHttp.WinHttpRequest.5.1") loReq.Open("POST", "https://你的目标API地址", .F.) * 设置自定义请求头 loReq.SetRequestHeader("Content-Type", "application/json;charset=utf-8") loReq.SetRequestHeader("Authorization", "Bearer 你的鉴权令牌") * 准备JSON报文 lcPostJson = '{"username":"test","password":"123456"}' * 发送请求 loReq.Send(lcPostJson) * 获取完整请求头 lcAllHeaders = loReq.GetAllRequestHeaders() * 拼接完整请求内容 lcFullRequest = lcAllHeaders + CHR(13) + CHR(10) + lcPostJson * 可输出到调试窗口或写入本地文本文件查看 STRTOFILE(lcFullRequest, "C:\temp\full_request.txt")
方案二:抓包工具采集(无需修改现有业务代码)
如果不想改动已上线的业务代码,可直接通过本地抓包工具捕获完整请求:
- 开启Fiddler、Wireshark等本地抓包工具,配置监听对应API的HTTP/HTTPS流量
- 运行原有VFP代码发送请求,即可在抓包工具中直接查看包含请求行、全部请求头、报文主体的完整发送内容,HTTPS请求只需在抓包工具中安装信任根证书即可解密查看
内容的提问来源于stack exchange,提问作者Alf
相关产品推荐
相关产品推荐

