以编程方式从plumtree知识目录下载文件

时间:2008-12-15 10:29:14

标签: plumtree

我是plumtree的新手,我正在努力了解Plumtree对象模型。 我正在尝试以编程方式从plumtree知识目录下载文件。

这是我正在使用的代码:

IRemoteSession session = RemoteSessionFactory.GetExplicitLoginContext(new Uri(url),userName,password);

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 个答案:

答案 0 :(得分:1)

问题是您的webclient实例不知道如何对plumtree服务器进行身份验证。新的NetowrkCredential()或CredentialCache.DefaultCredentials在简单的情况下工作,但显然不在这一个。

Plumtree使用cookie或(更可能)使用GetExplicitLoginContext()调用获得的特定登录令牌,然后与该会话中的所有后续请求一起发送。

您可以使用WebClient伪造这个“与所有后续请求一起发送”,但您需要了解有关Plumtree服务器如何对客户端进行身份验证的更多技术细节。您可以使用Fiddler找出一些信息,但更简单的方法可能是找到一个plumtree提供的API,用于下载之前上传到Plumtree的文件。

另一种(hacky)方法是假冒浏览器客户端。在上面提出您的请求,然后解析HTML,提取登录表单的操作URL,然后伪造一个HttpWebRequest调用,它看起来像填写登录表单的真实客户端。您需要使用CookieContainer来确保发送cookie,确保标题正确等。有关详细信息,请参阅http://channel9.msdn.com/forums/TechOff/162017-Using-WebClient-to-enter-Form-based-Auth-system-How/