Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自浏览器的好请求,但来自ruby的坏请求?_Ruby_Request_Google Api_Http Status Code 400_Typhoeus - Fatal编程技术网

来自浏览器的好请求,但来自ruby的坏请求?

来自浏览器的好请求,但来自ruby的坏请求?,ruby,request,google-api,http-status-code-400,typhoeus,Ruby,Request,Google Api,Http Status Code 400,Typhoeus,我正在使用google自定义搜索api,并试图通过一些ruby代码访问它: 下面是一段代码 req = Typhoeus::Request.new("https://www.googleapis.com/customsearch/v1?key={my_key}&cx=017576662512468239146:omuauf_lfve&q=" + keyword, followlocation: true) res = req.run 答案的主体似乎是这样的: <p

我正在使用google自定义搜索api,并试图通过一些ruby代码访问它:

下面是一段代码

req = Typhoeus::Request.new("https://www.googleapis.com/customsearch/v1?key={my_key}&cx=017576662512468239146:omuauf_lfve&q=" + keyword, followlocation: true)
res = req.run
答案的主体似乎是这样的:

    <p>Your client has issued a malformed or illegal request.  <ins>That’s all we know.</ins>
'
    from /usr/local/lib/ruby/2.1.0/json/common.rb:155:in `parse'
    from main.rb:20:in `initialize'
    from main.rb:41:in `new'
    from main.rb:41:in `<main>'
您的客户端发出了格式错误或非法的请求。我们只知道这些。
'
from/usr/local/lib/ruby/2.1.0/json/common.rb:155:in'parse'
从main.rb:20:in'initialize'
来自main.rb:41:in'new'
来自main.rb:41:in`'
当我尝试在浏览器上做同样的事情时,它就像一个符咒。更令人困惑的是,同样的代码在12小时前就已经运行了。我只更改了它应该查找的关键字,但是它开始返回错误


有什么建议吗?我确信我有足够的积分来满足更多的请求

您可能在get参数
关键字
中遇到特殊字符的问题。如果在浏览器中输入URL,浏览器将调整这些URL。但是,对于ruby,您需要对这些字符进行转义,以使像
“sky line”
这样的字符串变成
“sky+line”
等等。有一个实用函数,它的用法如下:

require 'cgi'
CGI::escape("sky line")
=> "sky+line"
req = Typhoeus::Request.new("https://www.googleapis.com/customsearch/v1?key={my_key}&cx=017576662512468239146:omuauf_lfve&q=" + CGI::escape(keyword), followlocation: true)
res = req.run
您的固定代码如下所示:

require 'cgi'
CGI::escape("sky line")
=> "sky+line"
req = Typhoeus::Request.new("https://www.googleapis.com/customsearch/v1?key={my_key}&cx=017576662512468239146:omuauf_lfve&q=" + CGI::escape(keyword), followlocation: true)
res = req.run
但是,由于您仍在使用Typhous,因此应该能够使用其
参数
并让Typhous处理转义:

req = Typhoeus::Request.new(
  "https://www.googleapis.com/customsearch/v1?&cx=017576662512468239146:omuauf_lfve",
   followlocation: true, 
   params: {q: keyword, key: my_key}
)
res = req.run

上面还有更多的例子。

你的关键字是否包含任何时髦的字符?比如
?#&/+/+/
等等,或者任何unicode字符?我尝试了“sky line”和“sky/line”来避开空格。除了errorTry
sky+line
sky%20line
可能之外,似乎没有人返回任何内容。我认为您应该使用
CGI::escape
来避免任何错误:是的。请把它写在一个答案里,这样我就可以接受它的第%20行行不通了。我发现加唱是最有用的哦,哇。提弗俄斯真了不起。谢谢你让我知道那些额外的信息。我会确保我读得更多