如何从Perl通过REST::Client模块使用最新的REST API将图像附加到现有的Confluence页面?
这可能是一个perl问题(我可能错误地发布了一个图像),也可能是一个Confluence问题(他们的API文档可能缺少一个必需的细节,比如curl悄悄添加的一个必需的头),或者两者兼而有之。
我已经使用REST::Client模块建立了一个连接对象$client。我已经验证了客户端是一个有效的连接,方法是执行$ $client->GET到一个已知的合流页面ID,这将正确地返回页面的详细信息。
我尝试上传一个图像,使用:
$headers = {Accept => 'application/json',
Authorization => 'Basic ' . encode_base64($user . ':' .
$password),
X_Atlassian_Token => 'no-check',
Content_Type => 'form-data',
Content =>
[ file => ["file1.jpg"], ]};
$client->POST('rest/api/content/44073843/child/attachment', $headers);..。并且该图像不会出现在附件列表中。
我在上传图片的同时对浏览器进行了包嗅探,结果发现它使用的是被弃用的原型API。我曾希望我能站在Atlassian的肩膀上,准确地看到他们的帖子流是什么样子,并复制它……但我不想使用被弃用的API,因为他们建议不要使用它。
当在中替换我的主机、文件名和页面ID时,调用Confluence API来附加他们在https://developer.atlassian.com/confdev/confluence-rest-api/confluence-rest-api-examples提供的文件的curl示例确实发布了附件。
我以前在我的内容项数组中指定了注释,但为了简化调试,在调试期间删除了它,因为文档中说它是可选的。
有一件事我不太清楚,那就是把文件的内容放到post流中。在curl命令中,@可以做到这一点。在REST::Client中,我不确定我是否需要做比以前更多的事情来实现它。
我无法对传出流量进行包嗅探,因为我们的服务器只允许https,而且我不知道如何(或者是否可能)设置REST::Client模块或其底层模块之一来将SSL信息记录到日志文件中,这样Wireshark就可以提取它并解码产生的TLS流量,就像使用Chrome或Firefox的环境变量一样。我也没有访问服务器日志的权限。因此,我不知道我实际发送的请求是什么样子的(如果我知道,我可能会说,“好吧,这里看起来是错的”或“但是看起来是对的?!”)。因此,不幸的是,我对如何如此盲目地调试它感到困惑。
关于使用REST::Client发布多部分表单的类似问题也在去年4月被其他人问过,但没有得到任何回应。我希望因为我的更具体,有人能告诉我我可能做错了什么。
任何帮助都将不胜感激。
发布于 2018-05-01 02:47:22
您应该像这样捕获您的post响应:
my $response = $client->POST('rest/api/content/44073843/child/attachment', $headers); print Dumper $response;此外,您在POST调用中使用的url是不完整的,不会工作,您需要完整的url。
https://stackoverflow.com/questions/34716301
复制相似问题