1. kaitaku

    Posted

    kaitaku
Changes in title
+最近、TrelloのAPI経由でデータ取得ができなくなってません? まぁ修正しましたけど
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,64 @@
+## 問題
+**TrelloのAPI経由でタスクなどを取得してDiscordなどに表示していたが、2020年8月後半からタスクなどが表示されなくなった。**
+
+
+## 原因
+Discordにエラーなどは表示されず。(そういう設定もしていないけど)
+
+「APIが原因か?」と考え、APIを含めたURLで叩いてみたら問題なく取得できている。
+
+それなら、実行ファイル(`PHP`)の問題かな?
+ターミナルで以下のコマンドを叩いてみる。
+
+```
+$ php (実行ファイル名).php
+```
+
+すると、以下のエラーが確認できた。
+
+```
+PHP Warning: file_get_contents(trelloのAPIが含まれたURL): failed to open stream: HTTP request failed! HTTP/1.1 426 Upgrade Required in (実行ファイル).php on line 15
+```
+
+`HTTP`リクエストのエラーなのはわかったけど、`426`って何? 見たことないんですけど。
+
+調べてみた所、**今のプロトコルじゃリクエストを拒否する**との事らしい。
+[426 Upgrade Required - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Status/426)
+
+**`HTTP/1.1 426 Upgrade Required in (実行ファイル).php on line 15`**って言われてるし、`file_get_contents()`を`HTTP/1.1`で実行できるようにすれば良いのかな?
+
+## 解決策
+
+**`stream_context_create()`で作成したHTTPヘッダ情報を`file_get_contents()`に渡す。**
+
+自分の予想で合っていたみたい。
+
+**`stream_context_create()`**でどんな形式で`HTTP`リクエストを実行するかを指定できるので、この関数を利用して`HTTP/1.1`で実行できるよう宣言する。
+**`file_get_contents`**の第三引数で`stream_context_create()`で作成したのを入れられるので、宣言したのを記述する。
+
+以上をまとめると、実行ファイルは以下のような形になる。
+
+```(実行ファイル).php
+//HTTPヘッダ情報
+$options = [
+ 'http' => [
+ 'method' => 'GET',
+ 'protocol_version' => 1.1,
+ 'header' => "Connection: close\r\n"
+ ]
+];
+$context = stream_context_create($options);
+
+$trello_url = "trelloのAPIが含まれたURL";
+$trello_data = file_get_contents($trello_Url,FALSE,$context);
+```
+
+挙動を確認してみた所、無事解決した。
+
+## 参考資料
+- [426 Upgrade Required - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Status/426)
+- [HTTP 1.1 426 Upgrade Required](https://community.atlassian.com/t5/Trello-discussions/HTTP-1-1-426-Upgrade-Required/td-p/1461934)
+- [2020年8月末頃から Trello API 経由のデータ取得が失敗する | Qrunch(クランチ)](https://qrunch.net/@armband/entries/opOrB1EoTmxEayqj?ref=qrunch)
+- [PHP: file_get_contents - Manual](https://www.php.net/manual/ja/function.file-get-contents.php)
+- [PHP: stream_context_create - Manual](https://www.php.net/manual/ja/function.stream-context-create.php)
+- [HTTPリクエストのカスタマイズ | PHP プログラミング解説](https://so-zou.jp/web-app/tech/programming/php/network/http/request/)