使用em-http-request失败的简单POST请求

时间:2014-08-06 15:23:49

标签: ruby http eventmachine em-http-request

以下查询适用于requestmaker

URI:

http://www.cleverbot.com/webservicemin/

查询:

start=y&icognoid=wsf&fno=0&sub=Say&islearning=1&cleanslate=false&stimulus=!!!%20there%20was%20an%20error%20!!!&icognocheck=af71393ce00d9126a247df2f53948e79

但它不适用于em-http-request

require 'eventmachine'
require 'em-http-request'


uri  = 'http://www.cleverbot.com/webservicemin/'
query = 'start=y&icognoid=wsf&fno=0&sub=Say&islearning=1&cleanslate=false&stimulus=!!!%20there%20was%20an%20error%20!!!&icognocheck=af71393ce00d9126a247df2f53948e79'

EM.run do

  http = EM::HttpRequest.new(uri).post(query: query)
  http.callback { puts http.response; EM.stop }
  http.errback { puts 'There was an error'; EM.stop }
end

打印There was an error。我感到难过,因为这个简单的例子适用于发送请求的任何其他方法,我已经检查过我的用法是否错误,但似乎不是。

编辑:仅供参考,这不是使用cleverbot的正确方法。我在:query下发送数据时犯了第二个错误。如果您使用http.post(body: query),则可以使用

1 个答案:

答案 0 :(得分:2)

看起来像是一个执行得很糟糕的服务器:它在没有返回正确的HTTP状态代码的情况下中止TCP连接,这就是为什么你看到"连接被服务器"当您查询http.error时。

如果您将默认用户代理更改为curl的UA字符串,则会收到回复:

  http = EM::HttpRequest.new(uri).post({
   :query => query,
   :head => {'User-Agent' => 'curl/7.30.0'}
  })