我有一个运行一些perforce操作的Perl应用程序,最后我希望它将结果上传到SharePoint网站。
脚本需要在Solaris上运行并尽可能少地使用外部库(绝对是纯粹的经典Perl),在这些unix盒上安装任何额外的东西是一件痛苦的事情,必须由远程团队完成。
如果可以使用wget轻松上传文档,那也会引起人们的兴趣。无论如何,我正在寻找一个或一对容易理解的衬垫。
根据评论更新:
http://sharepoint Unauthorized ....
我有这个:
my $m = WWW::Mechanize->new();
$m->credentials($user => $pass);
$m->get($url);
但是机械化不会出于某种原因对sharepoint进行身份验证。
我安装并尝试通过“dave”webdav浏览器打开my typical sharepoint site,但我收到** Unauthorized. **
错误。
答案 0 :(得分:6)
这听起来像是WWW::Mechanize的工作。它对处理表格有很好的支持。
答案 1 :(得分:2)
刚从perlmonks论坛上找到一个简单的方法:
http://www.perlmonks.org/?node_id=527182
under Windows, you can access a sharepoint site via a UNC name. The URL:
sharepoint.domain.dom/sites/Roboticus/Test
is accessible via:
\\sharepoint.domain.com\sites\Roboticus\Test
只是添加自己的答案,现在我要弄清楚如何从Perl编写脚本,以及是否有办法在unix上运行脚本。
答案 2 :(得分:1)
您可以使用Webdav界面吗? 每个SharePoint列表都有一个与之关联的webdav文件夹。
答案 3 :(得分:1)
要在WWW :: Mechanize中进行NTLM身份验证,您需要使用此格式
use URI;
my $u = URI->new($url);
my $host = $u->host;
my $port = $u->port;
my $hostport = "$host:$port";
$agent->$self->credentials($hostport, $realm, $user, $password);
答案 4 :(得分:1)
您可以使用 curl 连接到SharePoint(或任何网站),它可以使用Kerberos / NTLM进行身份验证并执行协商:
curl --ntlm -u domain/userid:passwd -T <file> "http://sharepoint URL"
- NTLM
(HTTP)启用NTLM身份验证。 NTLM身份验证方法由Microsoft设计,由IIS Web服务器使用。它是一个专有协议,由聪明人反向设计,并根据他们的努力实现卷曲。不应该认可这种行为,您应该鼓励使用NTLM的所有人切换到公共和记录的身份验证方法,例如Digest。如果要为代理身份验证启用NTLM,请使用--proxy-ntlm。
此选项需要使用SSL支持构建的库。使用-V, - version来查看你的curl是否支持NTLM。
如果多次使用此选项,则仅使用第一个选项。
-u, - user
指定用于服务器身份验证的用户名和密码。覆盖-n, - netrc和--netrc-optional。
如果您只是指定用户名,curl将提示输入密码。
用户名和密码在第一个冒号上分开,这使得无法在用户名中使用带此选项的冒号。密码仍然可以。
将Kerberos V5与基于Windows的服务器一起使用时,应在用户名中包含Windows域名,以便服务器成功获取Kerberos票证。如果您没有,那么初始身份验证握手可能会失败。
使用NTLM时,如果您的设置中只有一个域和林,则可以将用户名简单地指定为没有域的用户名。
要指定域名,请使用“低级别登录名”或“UPN(用户主要名称)”格式。例如,分别为EXAMPLE \ user和user@example.com。
如果您使用支持Windows SSPI的curl二进制文件并执行Kerberos V5,Negotiate,NTLM或摘要式身份验证,那么您可以通过使用此选项指定单个冒号来告诉curl从您的环境中选择用户名和密码:&# 34; -u:&#34;。
如果多次使用此选项,将使用最后一个选项。
-T, - upload-file
这会将指定的本地文件传输到远程URL。如果指定的URL中没有文件部分,Curl将附加本地文件名。请注意,必须使用最后一个目录上的尾部/来真正向Curl证明没有文件名,否则curl会认为您的上一个目录名是要使用的远程文件名。这很可能会导致上传操作失败。如果在HTTP(S)服务器上使用它,则将使用PUT命令。
使用文件名&#34; - &#34; (单个破折号)使用stdin而不是给定文件。或者,文件名&#34;。&#34; (单个期间)可以指定而不是&#34; - &#34;在非阻塞模式下使用stdin以允许在上传stdin时读取服务器输出。
您可以在命令行上为每个URL指定一个-T。每个-T + URL对指定要上载的内容和位置。 curl还支持&#34; globbing&#34; -T参数的含义,这意味着您可以使用URL中支持的相同URL通配样式将多个文件上载到单个URL,如下所示:
curl -T&#34; {file1,file2}&#34; http://www.uploadtothissite.com
甚至
curl -T&#34; img [1-1000] .png&#34; ftp://ftp.picturemania.com/upload/