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のポストもできるようになりました。

以上です。