2011-03-17 53 views
1

我試圖連接的Web服務的作者告訴我,我發送到他們的Apache Web服務器的webdav模塊的用戶名是在頭部沒有encoding = utf-8的情況下進入的,預期mime64編碼用於標題,因此,上載用戶的可以包含unicode字符的用戶標識不被接受和解碼。Indy 10 TIdWebDav是否支持用戶名中包含unicode字符的用戶的身份驗證?

我想知道的是,我可以以某種方式在TidWebDAV中設置一個屬性,它將改變HTTP編碼的方式,從而允許驗證包含無法顯示unicode字符的用戶名以簡單的ascii。我想也許AuthenticationManager屬性可能與它有關。在indy 9文件中,它說「這個屬性什麼都不做」。它在Indy 10中做了些什麼?它看起來像已經實施。

謎我還不知道包括:

(1)什麼是「logintype」(整數值)的WebDAV做的,什麼樣的價值觀我將它設置爲?目前我的代碼將其設置爲3.

(2)我是否需要使用hoForceEncodeParams強制編碼params?

(3)如何檢查遠程端會看到它們的表單中的標題?

更新:正如remy所說,NTLM身份驗證支持unicode字符。我還發現你可以在「用戶名:密碼」表單中使用基本身份驗證中的unicode utf8 mime(base64)編碼字符串。

回答

2

TIdAuthenticationManager的目的是保持認證參數緩存用於成功登錄到特定的URL。而已。 TIdHTTP在身份驗證期間沒有使用該緩存,但如果需要,您可以在OnSelectAuthenticationOnAuthentication事件中自行利用它。

在這種情況下實際使用哪種認證方案?哪個頭文件是webdav模塊期望字符編碼在?在Indy 10中,NTLM類在散列期間支持Unicode字符串,但它們使用UTF-16而不是UTF-8。

webdav作者可以提供更多關於他實際上期待你的信息嗎?

爲了回答您的其他問題:

(1)什麼是logintype「你指的是? Indy中沒有這樣的屬性或參數。

(2)hoForceEncodeParams僅在調用Post()發送'application/x-www-form-urlencoded'請求的TStrings對象時才適用。它對認證沒有影響。

(3)要查看正在發送什麼樣的數據來回的連接,就可以把TIdLog...組件,如TIdLogFileTIdLogEvent,到Intercept財產。或者使用外部數據包嗅探器,例如Wireshark。

+0

WebDav模塊是在Apache Httpd中運行的標準webdav模塊。實際上它看起來已經被修改了一些,或者有插件插入到這個插件中。我將在明天詳細瞭解遠程端(即C/C++)。 – 2011-03-18 00:43:50

+0

我認爲'logintype'可能是特定於這個略有修改的webdav模塊的實現細節。 – 2011-03-18 00:44:52

+0

我編輯的答案,而不是昨天的問題是否有可能撤消呢? – 2011-03-19 13:26:55