哪些字符会自动C++ Windows HttpOpenRequest() 进行 url 转义?

What characters are automatically url-escaped by C++ Windows HttpOpenRequest()?

本文关键字:进行 url 转义 HttpOpenRequest Windows 字符 C++      更新时间:2023-10-16

我在Windows,C++和Win32上使用Visual Studio 2015。 我有一个包含空格和其他不安全字符的 URL。 如果我将未转义的 URL 粘贴到邮递员中,邮递员会正确转义它们并且请求有效。 但是,如果我将未转义的URL放入HttpOpenRequest((,则某些字符(但不是全部(都会在接收系统中检测到时进行转义。

源语言: https://nsw.redacted.com/ScheduledActivitys;zoneId=urn:www.dec.nsw.gov.au:school:8481;contextId=current?where=[(//ScheduledActivitys/ScheduledActivity/ActivityDate>="2017-08-11"( 和 (//ScheduledActivitys/ScheduledActivity/ActivityDate<="2017-08-11"(]

邮递员: https://nsw.redacted.com/ScheduledActivitys;zoneId=urn:www.dec.nsw.gov.au:school:8481;contextId=current?where=[(//ScheduledActivitys/ScheduledActivity/ActivityDate%3E=%222017-08-10%22(%20and%20(//ScheduledActivitys/ScheduledActivity/ActivityDate%3C=%222017-08-10%22(]

Wininet:https://nsw.redacted.com/ScheduledActivitys;zoneId=urn:www.dec.nsw.gov.au:school:8481;contextId=current?where=[(//ScheduledActivitys/ScheduledActivity/ActivityDate>="2017-08-11"(%20and%20(//ScheduledActivitys/ScheduledActivity/ActivityDate<="2017-08-11"(]

所以我的问题是:我应该怎么做 - 自己转义字符,还是依靠 Win32 库来转义它们,或者尝试解决 Win32 Wininet 库中不完整的实现? 是否存在两次 URL 编码的危险? 在其他阅读中,看起来您不应该转义 URL 的"查询"部分("?"之后的部分( - 这个建议不正确吗? (哪些角色被逃脱了,为什么Microsoft逃脱了一些而不是另一些?

在您的示例中,wininet URL 只编码空白,对吧?当然,这不行。您必须自己进行URL编码。Wininet 需要一个有效的 URL;如果未正确编码查询,则查询无效。好消息是 URL 编码是一件简单的事情。只需几行代码。