これは、誰でも自宅で再現できる奇妙なものです (私は思います) - EC2 でホストされているサービスで Twitter で検索を実行する単純なサービスを作成しようとしています。Twitter は、Ruby で実行すると 100% の確率でエラーを返しますが、他の言語ではそうではありません。これは、IP ブロックの問題ではないことを示しています。次に例を示します。
admin@ec2-xx-101-152-xxx-production:~$ irb
irb(main):001:0> require 'net/http'
=> true
irb(main):002:0> res = Net::HTTP.post_form(URI.parse('http://search.twitter.com/search.json'), {'q' => 'twitter'})
=> #<Net::HTTPBadRequest 400 Bad Request readbody=true>
irb(main):003:0> exit
admin@ec2-xx-101-152-xxx-production:~$ curl http://search.twitter.com/search.json?q=twitter
{"results":[{"text":""Social Media and SE(Search Engine) come side by side to help promote your business and bran...<snip/>
ご覧のとおり、CURL は機能しますが、irb は機能しません。irb のローカル Windows ボックスで実行すると、成功:
$ irb
irb(main):001:0> require 'net/http'
=> true
irb(main):002:0> res = Net::HTTP.post_form(URI.parse('http://search.twitter.com/search.json'), {'q' => 'twitter'})
=> #<Net::HTTPOK 200 OK readbody=true>
これは紛らわしいです... Net::HTTP に何らかのコア バグがあった場合、Windows と Linux の両方で表示されると思います。また、IP によってブロックされている場合は、curl も機能しないはずです。 . 新しい IP addy を使用して、新しい Amazon インスタンスでもこれを試しました。
私はec2onrails amiを使用しているので、誰でもこれを再現できるはずです:
ec2-run-instances ami-5394733a -k testkeypair
その後、ssh して上記の単純な行を実行するだけです。何が起こっているのか誰にも考えがありますか?
ありがとう!