我正在尝试在我的rails应用程序中进行卷曲调用以进行情感分析,如此处所示https://algorithmia.com/algorithms/nlp/SentimentAnalysis
I love coding
但是在后面的勾号中,它没有正确地替换该值。那么如何在这个curl命令中替换变量呢?
当我使用0
执行此代码时,我在其网站上收到回复2
,我得到window.resize()
(这是正确的),这样我就相信它不会取代变量值正确。
答案 0 :(得分:1)
我认为你的api-key有错误。您的代码与我的api-key一样正常工作。
编辑:
代码正常工作,如下所示:
编辑2:
require 'json'
text = 'I love coding'
secret = 'secret'
result = `curl -X POST -d '"#{text}"' -H 'Content-Type: application/json' -H 'Authorization: Simple #{secret}' https://api.algorithmia.com/v1/algo/nlp/SentimentAnalysis/0.1.2`
result = JSON.parse(result)
puts result
答案 1 :(得分:1)
使用除最简单参数之外的任何内容进行系统调用时,应始终使用Shellwords库以确保正确转义和/或引用参数。例如:
require "shellwords"
text = '"I love coding"'
secret = "yv5julwo8l7biwuni62r37t823igd87d97u623568yf"
args = [ "-X", "POST",
"-d", text,
"-H", "Content-Type: application/json",
"-H", "Authorization: Simple #{secret}",
"https://api.algorithmia.com/v1/algo/nlp/SentimentAnalysis/0.1.2" ]
data = `curl #{args.shelljoin}`
result = JSON.parse(data)
而且,正如Tin Man指出的那样,反引号既不是唯一也不一定是在Ruby中进行系统调用的最佳方式。我强烈建议您阅读这一系列文章:https://devver.wordpress.com/2009/06/30/a-dozen-or-so-ways-to-start-sub-processes-in-ruby-part-1/
最后,当一个像rest-client,faraday和httparty这样的宝石可用时,对curl进行系统调用通常不是从Ruby发出HTTP请求的最好方法,更不用说标准库中的Net :: HTTP了。