1. kaitaku

    No comment

    kaitaku
Changes in body
Source | HTML | Preview
@@ -1,64 +1,67 @@
## 問題
**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);
```
-挙動を確認してみた所、無事解決した。
+`Connection: close`はリクエストが完了した後に、接続を切断してくれるよう宣言している。
+
+修正後、挙動を確認してみた所、無事解決した。
## 参考資料
- [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)
+- [Connection - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Connection)
- [HTTPリクエストのカスタマイズ | PHP プログラミング解説](https://so-zou.jp/web-app/tech/programming/php/network/http/request/)