0

以下查询适用于requestmaker

网址:

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)它会工作

4

1 回答 1

2

看起来像是一个执行不力的服务器:它中止 TCP 连接而没有返回正确的 HTTP 状态代码,这就是为什么您在查询 http.error 时看到“连接被服务器关闭”的原因。

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

  http = EM::HttpRequest.new(uri).post({
   :query => query,
   :head => {'User-Agent' => 'curl/7.30.0'}
  })
于 2014-08-07T01:08:00.787 回答