RESTAPIを使って、Confluenceに自動投稿するプログラムを作成した際にハマった話。
結論
httpじゃなくて、httpsで接続しよう!
経緯
Confluenceの公式のドキュメント。
2022年10月現在で、http接続での例が記載されている。
https://developer.atlassian.com/server/confluence/confluence-rest-api-examples/
curl -u admin:admin -X GET "http://localhost:8080/confluence/rest/api/content?title=myPage%20Title
&spaceKey=TST&expand=history" | python -mjson.tool
↑と同様にhttp接続で試すも、getメソッドでページの情報はとれるのに、postでのページの投稿はうまくいかない
原因特定の経緯
最初はPythonでコーディングしており、動作確認はPythonのrequestsライブラリを使ったレスポンスを表示することで行っていた。
https://dot-blog.jp/news/python-requests-redirect-url-status-code-get/
ここの記事にある通り、Pythonのレスポンスはリダイレクト後の情報のみを表示する。
ここがつまづいたポイントだった。
上記のことを知らないまま(原因がよくわかっていないまま)、とりあえず原因特定のためPythonではなく、curlを使うことに。
$ curl -u admin:admin http://XXXXXXXX/confluence/rest/api/content/scan?spaceKey=FS&limit=2&expand=history
上記コマンドを打つと、以下レスポンスが。
HTTP/1.1 301 Moved Permanently
location: https:/XXXXXXXX/confluence/rest/api/content
date: Thu, 27 Oct 2022 XX:XX:XX GMT
server: xxxxx
content-length: 0
これにより、https接続すべきことに気付き、原因特定に至りました。
getはうまくいくけど、postはうまくいかない、という挙動にも振り回され、原因特定に時間がかかってしまいました。
Pythonのrequestsのクセを知れてよかったですが。