请使用 WinHttpSendRequest 传body参数
时间: 2024-12-17 14:37:57 浏览: 2

SpringMVC的Body参数拦截的问题
在MFC中,如果你想要使用Windows API的WinHttpSendRequest函数发送POST请求并附带body参数,你需要首先初始化WinHttp.WinHttpRequest对象,并设置相应的属性。以下是基本步骤:
```cpp
#include <atlconv.h>
#include <winhttp.h>
// 创建WinHttpRequest对象
IWHttpRequest2 *httpReq;
HRESULT hr;
hr = CoCreateInstance(CLSID_WinHttpRequest2, NULL, CLSCTX_ALL, IID_PPV_ARGS(&httpReq));
if (FAILED(hr)) {
// 错误处理...
}
// 初始化连接
hr = httpReq->Open(WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, NULL, NULL, WINHTTP_DEFAULT_PROXY_AUTH);
if (FAILED(hr)) {
// 错误处理...
}
// 设置URL
BSTR url = SysAllocString(L"http://example.com/api/endpoint");
hr = httpReq->SetRequestURL(url);
SysFreeString(url);
// 设置请求方法为POST
hr = httpReq->SetMethod(WBXML_REQUEST_METHOD_POST);
if (FAILED(hr)) {
// 错误处理...
}
// 设置POST body
std::vector<BYTE> requestBody("key1=value1&key2=value2"); // 示例文本数据
BSTR requestBodyStr = SysAllocStringByteLen(reinterpret_cast<LPCSTR>(requestBody.data()), requestBody.size());
hr = httpReq->PutResponseBuffer(requestBodyStr, requestBody.size(), true); // 将二进制转换为BSTR
SysFreeString(requestBodyStr);
// 发送请求
hr = httpReq->Send();
if (FAILED(hr)) {
// 错误处理...
}
// 关闭请求
httpReq->Close();
// 清理
if (httpReq) {
hr = httpReq->Release();
if (SUCCEEDED(hr)) {
hr = CoUninitialize();
}
}
阅读全文
相关推荐













