WinInet - 如何在 301 重定向后获取服务器 URL
WinInet - How to obtain server URL after 301 redirect?
我正在使用 WinInet 函数进行编程C++但我遇到了一个问题。
我的程序打开一个包含 HttpOpenRequest()
、 HttpSendRequest()
、 InternetReadFile()
...函数并保存输出数据。我需要保存带有输出数据的URL,但在某些情况下,服务器会给我301 Moved
,InternetReadFile()
从新地址读取文件。
这没关系,但我需要找出它是什么地址。我试图将HttpQueryInfo
与HTTP_QUERY_RAW_HEADERS_CRLF
一起使用,但我没有得到这些信息,只有Content-Type
、Cache-Control
、Cookies
等。当我使用HTTP_QUERY_CONTENT_LOCATION
或类似的东西时,我会ERROR_HTTP_HEADER_NOT_FOUND
.
你可以帮我吗?
WinInet 收到重定向响应后,默认情况下会自动向新 URL 发送新的 HTTP 请求。 当 WinInet 准备好开始使用 InternetReadFile()
读取文件数据时,当时可用的标头属于请求的最后一个 URL,该 URL 可能与您最初请求的 URL 不同。 这就是为什么您看不到Location
标题的原因。 要处理重定向响应的标头,您必须在调用 HttpOpenRequest()
时指定 INTERNET_FLAG_NO_AUTO_REDIRECT
标志,然后可以使用 HttpQueryInfo()
检测重定向状态代码并读取其Location
标头,然后再调用 HttpSendRequest()
请求重定向到的新 URL。
当 wininet 中自动发生重定向时,您可以使用 InternetStatusCallback
函数获取重定向 URL。 代码 INTERNET_STATUS_REDIRECT (110)
将提供一个缓冲区,其中包含回调函数的新 URL。可以使用HINTERNET
句柄上的InternetSetStatusCallback()
来设置请求的回调函数。
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- C++ UDP 服务器在获取客户端地址配置时发送消息
- 从 c++ 服务器获取
- 如何使用 C++ 中的 cpprestsdk 发布 json 数据并从本地服务器获取响应
- 尝试重新连接到服务器时获取错误提升 asio 连接超时
- 多线程套接字编程服务器仅从 1 个客户端线程获取消息
- 可视化如何使用C++程序获取DHCPV6服务器IP.我尝试使用DHCPv6RequestParams,但总是收到错误代码
- 如何在Qt中获取主DNS服务器和辅助DNS服务器
- 如何将C++应用程序与节点.js服务器连接以获取 JSON 数据
- 使用SNTP(Windows C )从服务器获取时间/日期
- CORBA客户端/服务器应用程序,从服务器获取信息(空值)
- 在Javascript服务器应用程序之后获取HTML
- 如何将自动递增的主键的数据从 sql 服务器获取到我的数据网格视图
- 如何使用套接字实现服务器客户端编程,在套接字中服务器向客户端发送消息而不从客户端获取请求
- 无法在 gSOAP 服务器中获取 SOAP 客户端的 IP 地址
- WinInet - 如何在 301 重定向后获取服务器 URL
- 如何获取服务器的主机名
- 如何获取"服务器控制台"