Help us understand the problem. What is going on with this article?

TrelloのAPI経由でデータ取得ができなくなった時の対処法(HTTP/1.1 426 Upgrade Required編)

問題

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

Connection: closeはリクエストが完了した後に、接続を切断してくれるよう宣言している。

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

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした