使用perl REST :: Client和多部分表单将图像发布到Confluence

时间:2016-01-11 07:36:56

标签: perl rest curl confluence confluence-rest-api

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

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

我已经使用REST :: Client模块建立了一个连接对象$ client。我已通过对已知的Confluence页面ID执行$ client-> GET验证$ client是有效连接,该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示例会发布附件。

我之前在我的Content项目数组中指定了注释,但在调试期间将其删除以简化操作,因为文档说它是可选的。

我不清楚的一件事是将文件的内容放入后期流中。在curl命令中,@完成了。在REST :: Client中,我不确定是否必须做比我更多的事情来实现这一目标。

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

有关使用REST :: Client发布多部分表单的类似问题在去年4月被其他人(更一般地)提出,但未收到回复。我希望,因为我的更具体,有人可以告诉我我可能做错了什么。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

你应该像这样捕捉你的帖子回复:

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

此外,您在POST通话中使用的网址不完整且无法正常工作,您需要完整的网址。