1

クエリのBing検索結果を取得しようとしています。Rubyとを使用してcurbいますが、APIサーバーから結果を取得できませんでした。私はいつも得る400 Bad Request

これは、APIドキュメントがPHPについて述べていることです ここに画像の説明を入力してください

これが私のコードです:

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

何がうまくいかないのでしょうか?

4

1 に答える 1

2

これを試して:

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. (編集) 2 つの偽のヘッダー "request_fulluri" と "ignore_errors" も取り出しました。これらは Perl コードの実際のヘッダーではないと思います。私はそれらを入れようとしなかったので、無害かもしれませんが、あなたはそれらを望んでいないと思います.
于 2012-12-12T18:02:26.313 に答える