gpt4 book ai didi

perl - 如何使用 Perl SOAP::Lite 将文件从本地计算机上传到 Sharepoint?

转载 作者:行者123 更新时间:2023-12-02 05:08:01 25 4
gpt4 key购买 nike

#use SOAP::Lite ( +trace => all, maptype => {} );
use SOAP::Lite maptype => {};
use LWP::UserAgent;
use HTTP::Request::Common;

#credentials' file
require "c:\\test\\pass.pl";
my $userAgent = LWP::UserAgent->new(keep_alive => 1);

sub SOAP::Transport::HTTP::Client::get_basic_credentials {
return $username => $password;
}
my $soap
= SOAP::Lite
->uri('<mysite>/_vti_bin/lists.asmx')
->on_action(sub {join '/', 'http://schemas.microsoft.com/sharepoint/soap/CopyIntoItemsLocal', $_[1]})
->proxy('<mysite>/_layouts/viewlsts.aspx?BaseType=0', keep_alive => 1);

# my $method = SOAP::Data->name('CopyIntoItemsLocal')
# ->attr({xmlns => 'http://schemas.microsoft.com/sharepoint/soap/'});
# my @params = (SOAP::Data->name(SourceUrl => $source),
# SOAP::Data->name(DestinationUrl => $destination) );
# print $soap->call($method => @params)->result;

my $fileName = 'c:\test\abc.txt';
my $destDir = "<mysite>/Lists/sharepoint1/";

#load and encode Data
my $data;
open(FILE, $fileName) or die "$!";

#read in chunks of 57 bytes to ensure no padding in the middle (Padding means extra space for large files)
while (read(FILE, $buf, 60 * 57)) {
$data .= encode_base64($buf);
}
close(FILE);

#make the call
print "uploading $fileName...";
$lists = $soap->GetList();
my $method = SOAP::Data->name('CopyIntoItemsLocal')->attr({xmlns => 'http://schemas.microsoft.com/sharepoint/soap/'});
my @params = (
SOAP::Data->name('SourceUrl')->value($fileName)->type(''),
SOAP::Data->name('DestinationUrls')->type('')->value(
\SOAP::Data->name('string')->type('')->value($destDir . $fileName)
),
SOAP::Data->name('Fields')->type('')->value(
\SOAP::Data->name('FieldInformation')->type('')->attr({Type => 'File'})->value('')
),
SOAP::Data->name('Stream')->value("$data")->type('')

);

#print Results
print $soap->call($method => @params)->result;

#print $response->headerof('//CopyResult')->attr->{ErrorCode};
#use SOAP::Lite ( +trace => all, maptype => {} );
use SOAP::Lite maptype => {};
use LWP::UserAgent;
use HTTP::Request::Common;
use MIME::Base64 qw(encode_base64);
require "c:\\test\\pass.pl";
my $userAgent = LWP::UserAgent->new(keep_alive=>1);
#setup connection
sub SOAP::Transport::HTTP::Client::get_basic_credentials {
return $username => $password;
}
my $soap = SOAP::Lite
-> uri('http://<mysite>')
-> on_action( sub{ join '/', 'http://schemas.microsoft.com/sharepoint/soap', $_[1] })
-> proxy('http://<mysite>/_vti_bin/lists.asmx',keep_alive => 1);

$lists = $soap->GetListCollection();
quit(1, $lists->faultstring()) if defined $lists->fault();
my @result = $lists->dataof('//GetListCollectionResult/Lists/List');
foreach my $data (@result) {
my $attr = $data->attr;
foreach my $a qw'Title Description DefaultViewUrl Name ID WebId ItemCount' {
printf "%-16s %s\n", $a, $attr->{$a};
}
print "\n";
}

身份验证似乎有效。首先,我认为 GetlistCollection Web 服务正在运行,因为当我使用该 Web 服务进行调用时,它返回了一个页面。但我认为该调用正在返回我在 proxy 参数中指定的页面。

我能够在共享点上的特定站点上获取列表集合。

我使用了 GetListCollection。但是我并没有真正理解打印列表的代码。我刚从 squish.net 复制过来的.现在我正在尝试使用 CopyIntoItemsLocal 网络服务。

我们在一台服务器 (SVN) 上有一个文件存储库,我必须编写一个 Perl 脚本,该脚本在执行时会将文件和目录以及目录结构从 SVN 复制到共享点。

我将不胜感激任何帮助或提示。由于这是一项艰巨的任务,因此我正在以模块的形式进行。

最佳答案

我将从使用 soapUI 开始(以前是eviware,现在是smartbear)一个开源的soapUI测试工具。这将允许您在没有任何其他用户界面的情况下来回发送 soap 事务。一旦您确定您的交易有效并且您可以解析数据以获得您想要的结果,那么我将采取行动使用 Perl 来自动化这些交易。

这有助于您及早消除请求中的错误,了解如何解析响应,并熟悉 API。

关于perl - 如何使用 Perl SOAP::Lite 将文件从本地计算机上传到 Sharepoint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8965607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com