【问题标题】:Bing Search API via Ruby curb通过 Ruby 路边的 Bing 搜索 API
【发布时间】:2012-12-13 02:21:43
【问题描述】:

我正在尝试获取某个查询的 Bing 搜索结果。我正在使用 Ruby 和 curb,但无法从 API 服务器返回任何结果。我总是收到400 Bad Request

这就是 PHP 的 API 文档所说的

这是我的代码:

require 'curb'
require 'base64'

acctKey = "something"
authKey = Base64.encode64("#{acctKey}:#{acctKey}")
http = Curl.get("https://api.datamarket.azure.com/Bing/Search/Web?$format=json&Query=%27Xbox%27") do |http|
    http.headers['Authorization'] = "Basic #{authKey}"
    http.headers['request_fulluri'] = true
    http.headers['ignore_errors'] = false
    http.verbose = true
end

结果如下:

* About to connect() to api.datamarket.azure.com port 443 (#0)
*   Trying 157.55.194.132...
* Connected to api.datamarket.azure.com (157.55.194.132) port 443 (#0)
* Connected to api.datamarket.azure.com (157.55.194.132) port 443 (#0)
* SSL connection using AES128-SHA
* Server certificate:
*    subject: C=US; ST=WA; L=Redmond; O=Microsoft; OU=STBOS-Clouddb; CN=api.datamarket.azure.com
*    start date: 2012-08-31 18:37:12 GMT
*    expire date: 2013-07-31 21:26:57 GMT
*    common name: api.datamarket.azure.com (matched)
*    issuer: DC=com; DC=microsoft; DC=corp; DC=redmond; CN=Microsoft Secure Server Authority
*    SSL certificate verify ok.
> GET /Bing/Search/Web?$format=json&Query=%27Xbox%27& HTTP/1.1
Host: api.datamarket.azure.com
Accept: */*
request_fulluri: true
ignore_errors: false
Authorization: Basic ...

< HTTP/1.1 400 Bad Request
< Content-Type: text/html; charset=us-ascii
< Server: Microsoft-HTTPAPI/2.0
< Date: Wed, 12 Dec 2012 13:30:22 GMT
< Connection: close
< Content-Length: 339
< 
* Closing connection #0

会出现什么问题?

【问题讨论】:

    标签: ruby azure bing-api


    【解决方案1】:

    试试这个:

    require 'curb'
    require 'base64'
    
    acctKey = "<YOUR KEY>"
    authKey = Base64.strict_encode64("#{acctKey}:#{acctKey}")
    http = Curl.get("https://api.datamarket.azure.com/Bing/Search/Web", {:$format => "json", :Query => "'Xbox'"}) do |http|
        http.headers['Authorization'] = "Basic #{authKey}"
        http.verbose = true
    end
    
    puts http.body_str
    

    注意几点:

    1. Base64.encode64 返回一个带有换行符的字符串。 strict_encode64 将避免这个问题。 (您也可以只删除换行符。)
    2. 我无法将查询参数直接放在 URL 中。我只是将参数移出到哈希中,这可能是更典型的方法。
    3. (EDIT) 我还取出了两个伪造的标题“request_fulluri”和“ignore_errors”。我不认为这些是 Perl 代码中的实际标题。我没有尝试将它们留在里面,所以也许它们是无害的,但我认为你不需要它们。

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      相关资源
      最近更新 更多