1

如何通过 REST::Client 模块从 Perl 使用他们最新的 REST API 将图像附加到现有的 Confluence 页面?

这可能是一个 perl 问题(我可能发布了错误的图像),或一个 Confluence 问题(他们的 API 文档可能缺少所需的详细信息,例如 curl 悄悄添加的所需标题),或两者兼而有之。

我已经使用 REST::Client 模块建立了一个连接对象 $client。我通过对已知的 Confluence 页面 ID 执行 $client->GET 验证了 $client 是一个有效的连接,它正确地返回了页面的详细信息。

我尝试上传图片,使用:

$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,因为他们不推荐使用它。

调用 Confluence API 以附加他们在https://developer.atlassian.com/confdev/confluence-rest-api/confluence-rest-api-examples提供的文件的 curl 示例,当我的主机、文件名和页面ID被替换,并发布附件。

我以前在我的内容项数组中指定了注释,但在调试过程中删除了它以简化事情,因为文档说它是可选的。

我不清楚的一件事是将文件的内容放入帖子流中。在 curl 命令中,@ 完成了该操作。在 REST::Client 中,我不确定我是否需要做更多的事情来实现这一点。

我无法对传出流量进行数据包嗅探,因为我们的服务器只允许 https,而且我不知道如何(或者是否可能)设置 REST::Client 模块或其底层模块之一来记录 SSL 信息到一个日志文件,以便 Wireshark 可以获取它并解码生成的 TLS 流量,就像使用 Chrome 或 Firefox 的环境变量一样。我也无权访问服务器日志。所以我不知道我实际发送的请求是什么样的(如果我这样做了,我可能会说,“好吧,这里看起来不对”或“但看起来对吗?!”)。因此,不幸的是,我不知道如何如此盲目地调试它。

去年 4 月,其他人更笼统地问了一个关于使用 REST::Client 发布多部分表单的类似问题,但没有收到任何回复。我希望由于我的更具体,有人可以告诉我我可能做错了什么。

任何帮助,将不胜感激。

4

1 回答 1

0

您应该像这样捕获您的帖子响应:

my $response = $client->POST('rest/api/content/44073843/child/attachment', $headers);   print Dumper $response;

此外,您在 POST 调用中使用的 url 不完整且无法使用,您需要完整的 url。

于 2018-04-30T18:47:21.640 回答