WinINet:如何防止 HttpSendRequest 跟随重定向(30x 状态代码)?

Posted

技术标签:

【中文标题】WinINet:如何防止 HttpSendRequest 跟随重定向(30x 状态代码)?【英文标题】:WinINet: How to prevent HttpSendRequest to follow redirects (30x Status Codes)? 【发布时间】:2009-02-13 17:12:50 【问题描述】:

当我使用WinINet API 的HttpSendRequest 方法发出HTTP 请求,并且响应发送“302: Moved Temporarily”时,WinINet API 会自动遵循重定向指令并发出新请求。

那么,如何防止 HttpSendRequest 跟随重定向(30x 状态码)?

我不想发出两个请求...我不想得到它得到的第一个响应,它的标题中带有状态代码 302。

【问题讨论】:

【参考方案1】:

我找到了一个标志 INTERNET_FLAG_NO_AUTO_REDIRECT,我必须将其传递给 HttpOpenRequest

但是,它不起作用....

【讨论】:

【参考方案2】:

如果您能够改用 WinHTTP (link),则可以防止重定向。

【讨论】:

【参考方案3】:

尝试在对HttpSendRequest 的调用中使用INTERNET_FLAG_NO_AUTO_REDIRECT。听起来你正试图从HttpOpenRequest 使用它。

我将此标志与InternetOpenUrl 一起使用,它在该调用中正常工作。

【讨论】:

我认为情况并非如此。 HttpSendRequest 不接受 dwFlags 参数,并且在 HttpOpenRequest msdn 页面上提到了该标志。见msdn.microsoft.com/en-us/library/windows/desktop/…【参考方案4】:

似乎 WinInet 的行为很大程度上取决于 InternetOpen 函数调用中指定的 lpszAgent。当您传递"Mozilla/5.0 (compatible)" 时,所有重定向都将被忽略,当您读取InternetReadFile 的响应时,您将获得 RAW html 结果。

另一方面,如果您需要“重定向”输出,则必须在 Agent 参数中指定您的应用程序名称,例如 "ConEmu Update"

【讨论】:

以上是关于WinINet:如何防止 HttpSendRequest 跟随重定向(30x 状态代码)?的主要内容,如果未能解决你的问题,请参考以下文章

C++ wininet,连接weblogin,如何设置cookies?

如何使用 WinINet 查找网页是不是存在

如何使用 wininet 强制执行 tls 1.x

如何强制 WinInet 和 MSXML 使用 TLS1.0

使用wininet下载文件时如何避免冻结

WinInet如何使用sock代理