1. kaitaku

    No comment

    kaitaku
Changes in body
Source | HTML | Preview

問題

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

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);

挙動を確認してみた所、無事解決した。

参考資料