LoginSignup
2
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-09-15

問題

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はリクエストが完了した後に、接続を切断してくれるよう宣言している。

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

参考資料

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1