twitternig-modeから長文のtweetをポストするとエラー417が返されるんだけど、それを無理矢理解決してみた
私は、twittering-mode使いたい一心でTwitterをはじめたわけですが、いつのころからか、twittering-modeから長文のtweetをポストすると、エラー417が返ってきて、ポストが受け付けられないという状況が発生していました。
どれくらいの長さでエラーとなるのか試してみたところ、ひらがなだけで111文字のtweetは通ったけれど、112文字を超えると無理。またascii文字が含まれてると投稿可能文字数が増えるので、文字数じゃなくて、バイト数がからんでるんだろうな、とは推測してました。
Twitterが返すのはResponse status code: 417 Expectation Failed。
debugモードで動作させてみたところ、バッファが残るみたいなので、それを開いてみたところ、Except: 100-continueがどうとかこうとかゆってる。なので、これをキーワードに調べたところ、有力な情報が見付かりました。
curlでは、リクエストボディの長さが1024バイトを超える場合、自動的に100-continueが送信されるようです。
http://www.escafrace.co.jp/blog/09/10/16/1008
Twitterが100に対応してないため、417を返すみたいです。
curlにExcept: 100-continueというヘッダを加えさせないためには、-H "Expect:" (--header "Expect:")というオプションを付けてやればいいとわかったので、lispをわからんながら眺めていたところ、ヘッダをいろいろやってるところを見付けたので、試しに580行目あたりに以下の数行を追加してみました。
(unless (assoc "Expect" headers) (setq headers (cons `("Expect" . ,"") headers)))
これが正しいやりかたがどうかはわからないけれど、とりあえずこれで140文字のtweetのポストもできるようになりました。
以上です。