什么字符自动通过C++ Windows HttpOpenRequest()转义?

问题描述:

我在Windows,C++和Win32上使用Visual Studio 2015。我有一个包含空格和其他不安全字符的URL。如果我将未转义的URL粘贴到邮差中,邮差正确地转义它们并且请求起作用。但是,如果我将未转义的URL放入HttpOpenRequest(),则接收系统中检测到的某些字符(但不是全部)会被转义。什么字符自动通过C++ Windows HttpOpenRequest()转义?

原件: https://nsw.redacted.com/ScheduledActivitys;zoneId=urn:www.dec.nsw.gov.au:school:8481;contextId=current?where=[(//ScheduledActivitys/ScheduledActivity/ActivityDate> = “2017年8月11日”)和(// ScheduledActivitys/ScheduledActivity/ActivityDate < = “2017年8月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年8月11日”)%20于是20%(// ScheduledActivitys/ScheduledActivity/ActivityDate < = “2017年8月11日”)]

所以我的问题是:我该怎么要做 - 逃离字符mysel f,还是依靠Win32库来逃避它们,或者尝试在Win32 Wininet库中解决未完成的实现?它会被URL编码两次吗?而在其他阅读中,您似乎不应该逃避URL的“查询”部分('?'之后的部分) - 这种建议是否不正确? (以及哪些字符被转义,为什么微软可以转义一些而不是其他转义?)

在你的例子中,wininet的URL只能编码空格,对吗?当然,这不会。你必须自己做URL编码。 Wininet预计有效的URL;如果您没有正确编码查询,则无效。好消息是URL编码是一件简单的事情。只需几行代码。