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

时间:2017-08-11 03:34:17

标签: c++ url-encoding wininet

我在Windows,C ++和Win32上使用Visual Studio 2015。我有一个包含空格和其他不安全字符的URL。如果我将未转义的URL粘贴到Postman中,Postman会正确地转义它们并且请求有效。但是,如果我将未转义的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&GT; =&#34; 2017年8月11日&#34)%20于是%20(// ScheduledActivitys / ScheduledActivity / ActivityDate&LT; =&#34; 2017年8月11日&#34)] < / p>

所以我的问题是:我应该做什么 - 自己逃避角色,或者依靠Win32库来逃避它们,或者尝试在Win32 Wininet库中解决不完整的实现?是否存在两次URL编码的危险?在其他阅读中,看起来你似乎不应该逃避&#34;查询&#34; URL的一部分(&#39;?&#39;之后的那篇文章) - 该建议不正确吗? (以及哪些角色被逃脱,为什么微软会逃避一些而不是其他人?)

1 个答案:

答案 0 :(得分:0)

在你的示例中,wininet URL只编码空白,对吧?当然,这不会做。您必须自己进行URL编码。 Wininet需要一个有效的URL;如果您没有正确编码查询,那么它是无效的。好消息是URL编码很简单。只需几行代码。