以下查询适用于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)
,则可以使用
答案 0 :(得分:2)
看起来像是一个执行得很糟糕的服务器:它在没有返回正确的HTTP状态代码的情况下中止TCP连接,这就是为什么你看到"连接被服务器"当您查询http.error时。
如果您将默认用户代理更改为curl的UA字符串,则会收到回复:
http = EM::HttpRequest.new(uri).post({
:query => query,
:head => {'User-Agent' => 'curl/7.30.0'}
})