首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WinInet修改/删除HTTP响应头

使用WinInet修改/删除HTTP响应头
EN

Stack Overflow用户
提问于 2017-07-18 14:30:43
回答 1查看 245关注 0票数 0

连接WinInet可以通过Wininet::InternetReadFile()方法访问HTTP,但是lpBuffer不包括headers。

虽然我可以读取响应头(Wininet::HttpQueryInfo ),但我无法修改或删除它们。

是否可以使用Wininet挂钩修改/删除HTTP响应头?

有一种方法可以从Wininet钩子访问完整的HTTP响应缓冲区吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-26 17:24:41

你不能,cz的http响应头是随意来自服务器的回复!

但是,如果您想让钩子Wininet::HttpQueryInfo函数用假数据填充http头响应,那么可以通过创建类似的钩子

代码语言:javascript
复制
BOOLAPI _stdcall HookedHttpQueryInfoW(
_In_ HINTERNET hRequest,
_In_ DWORD dwInfoLevel,
_Inout_updates_bytes_to_opt_(*lpdwBufferLength, *lpdwBufferLength) __out_data_source(NETWORK) LPVOID lpBuffer,
_Inout_ LPDWORD lpdwBufferLength,
_Inout_opt_ LPDWORD lpdwIndex
);
WriteProcessMemory(GetCurrentProcess(), (LPVOID)FuncAddress, FuncOriginalBytes, sizeof(FuncOriginalBytes), &bytesWritten);      

HttpQueryInfo使用Handler检索http头,因此在这里您可以对您的web执行另一个请求,以定制其返回头,并在返回实际函数时将其设置为常量(用您的请求处理程序修改hrequest )。

代码语言:javascript
复制
return HttpQueryInfoW(
    _In_ HINTERNET MyHandler,
    _In_ DWORD dwInfoLevel,
    _Inout_updates_bytes_to_opt_(*lpdwBufferLength, *lpdwBufferLength) __out_data_source(NETWORK) LPVOID lpBuffer,
    _Inout_ LPDWORD lpdwBufferLength,
    _Inout_opt_ LPDWORD lpdwIndex
    );

现在,如果你打电话

代码语言:javascript
复制
HttpQueryInfoW(hrequest, HTTP_QUERY_RAW_HEADERS_CRLF, lpOutBuffer,&dwSize,NULL);

它将是

代码语言:javascript
复制
HttpQueryInfoW(MyHandler, HTTP_QUERY_RAW_HEADERS_CRLF, lpOutBuffer,&dwSize,NULL);

顺便说一句,有各种各样的窍门,但对我来说,这似乎很容易解释,也很容易理解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45169744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档