2008-12-15 113 views
1

我是新來的plumtree,我想了解Plumtree對象模型。 我正在嘗試以編程方式從plumtree知識目錄下載文件。以編程方式從plumtree知識目錄中下載文件

這是我使用的代碼:

IRemoteSession會話= RemoteSessionFactory.GetExplicitLoginContext(新的URI(URL),用戶名,密碼);

IDocumentFolderManager DocFolderManager = session.GetDocumentFolderManager();

IDocumentManager DocManager = session.GetDocumentManager();

IObjectQuery FolderQuery = DocFolderManager.GetSubFolders(folderID);

IDocumentQuery DocQuery = DocManager.CreateQuery(FolderQuery.GetRow(i).GetID());

IObjectQuery DocumentQuery = DocQuery.Execute();

IObjectQueryRow document = DocumentQuery.GetRow(1);

IDocumentProperties _docProperties = DocManager.QueryDocumentProperties(document.GetID());

string docUrl = _docProperties.GetStringValue(5);

WebClient webclient = new WebClient();

webclient.Credentials = new System.Net.NetworkCredential(userName,password,「」);

webclient.Credentials = CredentialCache.DefaultCredentials;

webclient.DownloadFile(docUrl,「c:\ 1」);

但是,我的會話創建代碼似乎存在一些問題,因爲不是下載實際文件,而是將Plumtree登錄頁面下載到我的文件系統。

有人可以告訴我我在這裏做什麼嗎?必須有我丟失的東西

回答

1

問題是,您的webclient實例不知道如何對照plumtree服務器進行身份驗證。新的NetowrkCredential()或CredentialCache.DefaultCredentials適用於簡單的情況,但顯然不適用於此。

Plumtree使用cookie或(更可能)通過調用GetExplicitLoginContext()獲得的特定登錄令牌,然後與該會話中的所有後續請求一起發送。

您可能會使用WebClient僞造「隨同所有後續請求一起發送」,但您需要了解有關Plumtree服務器如何驗證客戶端的更多技術細節。您可以使用Fiddler來找出這些信息,但更簡單的方法可能是找到一個plumtree提供的用於下載以前上傳到Plumtree的文件的API。

解決這個問題的另一種方法是僞造瀏覽器客戶端。在上面做出你的請求,然後解析HTML,拉出登錄表單的動作URL,然後僞造一個HttpWebRequest調用,看起來像是一個填寫登錄表單的真實客戶端。您需要使用CookieContainer以確保發送Cookie,確保標題正確等。有關更多信息,請參閱http://channel9.msdn.com/forums/TechOff/162017-Using-WebClient-to-enter-Form-based-Auth-system-How/

相關問題