BETA

2020年8月末頃から Trello API 経由のデータ取得が失敗する

投稿日:2020-09-08
最終更新:2020-09-08

経緯

Trello API 経由でデータを取得するプログラムが2020年8月末頃からコケていたので原因を調査しました。

調査

まず API の URL をブラウザで直に叩いて取得できるか確認しました。これはOK。

次にプログラムのメソッドを叩いてみましたが、これはダメでした。

ただ、プログラムを実行した際に画面に以下の Warning が出ていました。

Warning: file_get_contents(https://trello.com/1/boards/xxxxxxxxxxxxxxxxxxxxxxxx/cards?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx): failed to open stream: HTTP request failed! HTTP/1.1 426 Upgrade Required in PATH/TO/Project/DIRECTORY/program.php on line xxx

PHP の file_get_contents で取得していたのですが、それが 426 Upgrade Required で弾かれている模様。

そこで 426 Upgrade Required をキーワードに追加して検索。情報は少なかったですが、以下のスレッドがヒットしました。

同じ現象ですね。2020/8/20に投降されたものなので、時期的にも一致。

この投稿に対して、質問者が自己解決して以下のレスが付いていました。

Forcing the call to use 1.1 seems to resolve for now. Something must have changed in the last couple of days.

対処

上述のレスを頼りに HTTP のプロトコルバージョンを1.1に強制してみます。

変更前は以下のようにシンプルに file_get_contents を呼ぶプログラムでした。

// get request  
$json = file_get_contents('https://trello.com/1/board/' . $board_id . '/cards?key=' . $api_key . '&token=' . $access_token);  

これに、以下のようにコンテキストを組み立てる前処理を追加しました。

// make request header  
$options = [  
    'http' => [  
        'method'           => 'GET',  
        'protocol_version' => 1.1,  
        'header'           => "Connection: close\r\n"  
    ]  
];  
$context = stream_context_create($options);  
// get request  
$json = file_get_contents('https://trello.com/1/board/' . $board_id . '/cards?key=' . $api_key . '&token=' . $access_token);  

これでもう一度メソッドを叩いて Warning が出ずに取得できるようになったことを確認。

ということで、いつから変更されたのか等の詳しい情報は追い切れていませんが、ひとまず対処することはできました。

参考

426 Upgrade Required

PHP

そろそろ Guzzle 等を使った方法に書き換えましょうかね……。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

アルム=バンドのQrunch

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう