这是一个奇怪的,任何人都可以在家复制(我认为) - 我正在尝试编写一个简单的服务来在 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 地址尝试了这个。
任何人都应该能够重现这个,因为我正在使用 ec2onrails ami:
ec2-run-instances ami-5394733a -k testkeypair
之后只需 ssh 并运行上面的那些简单行。有人知道发生了什么吗?
谢谢!