WinINet APIのメソッドHttpSendRequestを使用してHTTP要求を行い、応答が " "を送信すると、WinINet APIは自動的にリダイレクト命令に従い、新しい要求を行います。302: Moved Temporarily
では、HttpSendRequestがリダイレクト(30xステータスコード)に従うのを防ぐにはどうすればよいですか?
2つのリクエストを行いたくありません...ヘッダーにステータスコード302が含まれる最初のレスポンスを取得したくありません。
WinINet APIのメソッドHttpSendRequestを使用してHTTP要求を行い、応答が " "を送信すると、WinINet APIは自動的にリダイレクト命令に従い、新しい要求を行います。302: Moved Temporarily
では、HttpSendRequestがリダイレクト(30xステータスコード)に従うのを防ぐにはどうすればよいですか?
2つのリクエストを行いたくありません...ヘッダーにステータスコード302が含まれる最初のレスポンスを取得したくありません。
INTERNET_FLAG_NO_AUTO_REDIRECT
に渡さなければならないフラグを見つけましたHttpOpenRequest
。
しかし、それは機能していません...。
INTERNET_FLAG_NO_AUTO_REDIRECT
の呼び出しで使用してみてくださいHttpSendRequest
。から使用しようとしているようですHttpOpenRequest
。
このフラグをInternetOpenUrl
。と一緒に使用すると、その呼び出しで正しく機能します。
代わりにWinHTTPを使用できる場合は、リダイレクトを防ぐことができます(link)。
WinInet の動作は、関数呼び出しでのlpszAgent
指定に大きく依存しているようです。InternetOpen
渡す"Mozilla/5.0 (compatible)"
と、すべてのリダイレクトが無視され、 で応答を読み取るときに生の HTML 結果が得られますInternetReadFile
。
一方、「リダイレクトされた」出力が必要な場合は、Agent 引数でアプリケーション名を指定する必要があります (例: "ConEmu Update"
.