2017-08-11 146 views
0

我在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的「查詢」部分('?'之後的部分) - 這種建議是否不正確? (以及哪些字符被轉義,爲什麼微軟可以轉義一些而不是其他轉義?)

回答

0

在你的例子中,wininet的URL只能編碼空格,對嗎?當然,這不會。你必須自己做URL編碼。 Wininet預計有效的URL;如果您沒有正確編碼查詢,則無效。好消息是URL編碼是一件簡單的事情。只需幾行代碼。