ようへい

2020年1月7日火曜日

twit で Error: incorrect header check が発生する場合の対処法

Chrome Extension で twit を使い Twitter からデータを取得していたのだが、11月くらいから Error: incorrect header check が発生していた。 パケットを見るとデータの取得は出来ているようだったが、スタックトレースを見ると、以下のようなログが出ていた。
11:59:05.119 background.ts:298 Error: incorrect header check
    at Zlib._handle.onerror (index.js:352)
    at Zlib._error (binding.js:283)
    at Zlib._checkError (binding.js:254)
    at Zlib._after (binding.js:262)
    at eval (binding.js:126)
    at eval (process.js:5)
GitHub 側にも報告有り。
Error: data error: incorrect header check · Issue #520 · ttezel/twit · GitHub
https://github.com/ttezel/twit/issues/520 想像だが、11月から Twitter APIが乗っているサーバが変わったとかで、gzip 圧縮の仕様が変わり、 Accept-Encoding: gzip を付けてAPIをリクエストした場合、返された gzip データを解凍できなくなり発生しているんだと思う。
gzip 圧縮を許可させなければいいので、twit のソースを変更することで、対処できそう。
本当は pull request 出せればいいんですが、issue 見ても動きが無いし、プロジェクトはもう動いて無い感じ・・・。
そして twit よりよさげな Twitter API クライアントも無い。
なので、twit にモンキーパッチを当てて回避する。
モンキーパッチで対処するため、パラメタで On/Off とかも考えず、とりあえず gzip 圧縮を無効にする。 まず、twit にパッチを当てたいので、patch-package を入れることにする。
$ yarn add -D patch-package
package.json の scripts に "postinstall": "patch-package" を追加
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "build:report": "vue-cli-service build --report",
    "build:dev": "vue-cli-service build --mode development",
    "build-watch": "vue-cli-service build-watch",
    "build-watch:dev": "vue-cli-service build-watch --mode development",
    "postinstall": "patch-package"
  },
twit の twitter.js の L208 をコメントアウト
twit/twitter.js at master · ttezel/twit · GitHub
https://github.com/ttezel/twit/blob/master/lib/twitter.js#L208
diff --git a/node_modules/twit/lib/twitter.js b/node_modules/twit/lib/twitter.js
index 9540857..c6baae3 100644
--- a/node_modules/twit/lib/twitter.js
+++ b/node_modules/twit/lib/twitter.js
@@ -205,7 +205,7 @@ Twitter.prototype._buildReqOpts = function (method, path, params, isStreaming, c
       'Accept': '*/*',
       'User-Agent': 'twit-client'
     },
-    gzip: true,
+    // gzip: true,
     encoding: null,
   }
パッチ作成
$ npx patch-package twit
パッチが効いているか試すため twit を入れなおす。
$ yarn remove twit
$ yarn add -D twit
これで twitter.js の L208 がコメントアウトされていればOK。
あとは build して、Error: incorrect header check が発生しないことを確認する。
関連記事

0 件のコメント:

コメントを投稿