php製のslackのslash commandsで突然 failed to open stream: HTTP request failed! HTTP/1.1 426 Upgrade Required
状況
2021年10月上旬ごろから急にslackのスラッシュコマンドが反応しなくなった。
プログラムは既に4年が経過していて、php製
↓停止したスラッシュコマンド
研究室のslackにscrapboxへテンプレートを自動で作成してくれるコマンド作った
— 又 (@matatsuna) 2017年5月16日
名前とアイコンをそれっぽくしたら公式っぽくなったww(非公式) pic.twitter.com/XK6oF4WlEI
原因
slackがTLS1.0/TLS1.1の通信のサポートを廃止したから 多分
Slack での Transport Layer Security (TLS) の変更 セキュリティとデータ整合性に関する業界のベストプラクティスに従い、Slack は、TLS バージョン 1.0 および 1.1 へのサポートを 2020 年 2 月 19 日付で終了します。この日以降、TLS 1.2 へのアップグレードが未完了のサービスから Slack に送信されるリクエストはすべて到達しなくなります。
file_get_contents がデフォルトだとHTTP/1.0を使うらしい
PHP 8.0.0 以降では、デフォルトは 1.1 です。 それより前のバージョンでは、デフォルトは 1.0 でした。
TLSのサポートされるのがHTTP/1.1かららしい
HTTP/1.0 でhttps接続するとTLS1.0かTLS1.1を使っていたのかもしれない
解決策
file_get_contentsからcurlに書き換えてHTTP/2にあげる
スラッシュコマンドの response_url
を使って $json をPOSTするようにしてます
$response_url = "https://hooks.slack.com/commands/hoge/fuga"; $opts = [ CURLOPT_VERBOSE => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_POSTFIELDS => json_encode($json) ]; $ch = curl_init($response_url); curl_setopt_array($ch, $opts); curl_exec($ch); curl_close($ch);
file_get_contents をHTTP/1.1にする方法もある qiita.com
ちなみに:file_get_contents を使ってHTTP/2を使う方法が見つからなかった
動作環境
docker php:7.2-apache
参考
curl エクステンションで HTTP/2 リクエストを送信する - Qiita
ブラウザ上でprocessingを編集と実行ができるprocessingrunを作った
概要
ちょっとしたprocessingのコードの挙動を確認したい時にさっと、ブラウザ上で動作する環境が欲しかったので作成しました。
ちょっとしたprocessingのコードをweb上で編集、実行、確認できるprcessingrunを作りました。
— 又 (@matatsuna) 2020年5月25日
超簡易的なコード補完も実装しています。
monaco-editorとprocessing.js(既に開発終了)を使用しているため、p5.jsの書き方ではなく普通のprocessingの書き方で実行できます。https://t.co/8C6h3KtSM5 pic.twitter.com/D7tyNZeySC
特徴
- ボタンは、実行と停止ボタンのみ
- 実行環境には、processing.js(既に開発終了)を使用しているため、普通の (インストール版) processingの記法で記述が可能
- エディターには、VS Codeのmonaco-editorを使用しており、定義ファイルによる簡易的なコードの補完が可能
注意
- 保存機能は一切ありません。(取得もしてません)
- p5.jsの記法では動作しません。p5.jsでは、公式の p5.js Web Editor などを使用してください。
ニコニコ動画のURLの構造確認&動画IDを取得する正規表現(javascript)
要約
ニコ動のURLを入力させた時に、有効なURLかを判定し、動画ID抽出、URLを綺麗に揃えるスクリプト
経緯
ニコ動にある動画のIDは多くは sm********
だと思うが、歴史的には多くの英数2字が存在するらしい。
また、数字部分の長さも色んなものがあるらしい。ちゃんと定義したい。
ユーザにニコ動のURLを入力させるときにそのURLの構造が正しいか判定したい、また、短縮URLを直したい場面にどうぞ。
コード
// 対象URL // https://nico.ms/sm******** // https://www.nicovideo.jp/watch/sm******** url = "https://www.nicovideo.jp/watch/sm8628149"; niconicoIdReg = /(?:sm|nm|so|ca|ax|yo|nl|ig|na|cw|z[a-e]|om|sk|yk)\d{1,14}\b/; if (/(nicovideo\.jp|nico\.ms)/.test(url) && !/live/.test(url)) { let videoId = url.match(niconicoIdReg); if (videoId !== null) { console.log("www.nicovideo.jp/watch/" + videoId[0]); } }
参考
動画IDを抽出する正規表現をニコ動のjsから、外枠をqiitaから拝借しました