2008-12-15 78 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/

相关问题