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?