作業中のアプリケーションを古い Bing API から新しい API に移植しています。新しいものが PHP でどのように機能するかについてのいくつかの投稿を見てきましたが、認証の問題が発生しています。
これは、URL によって返されるエラーです。
Warning: file_get_contents(https://api.datamarket.azure.com/Bing/Search/Image?$format=json&Query=%27%27) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 401 The authorization type you provided is not supported. Only Basic and OAuth are supported in /home/krem81/public_html/classes/class.BingSearch.php on line 178
次に、これは API とやり取りするために使用している関数です。
$accountKey = $this->Appid;
$ServiceRootURL = "https://api.datamarket.azure.com/Bing/Search/";
$WebSearchURL = $ServiceRootURL . 'Image?$format=json&Query=';
$context = stream_context_create(array(
'http' => array(
'request_fulluri' => true,
'header' => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey)
)
));
$request = $WebSearchURL . urlencode( '\'' . $_POST["searchText"] . '\'');
echo($request);
$this->response = file_get_contents($request, 0, $context);
$this->results = json_decode($this->response);
これを試してから、私も試しました
$accountKey = $this->Appid;
$ServiceRootURL = "https://api.datamarket.azure.com/Bing/Search/";
$WebSearchURL = $ServiceRootURL . 'Image?$format=json&Query=';
$request = $WebSearchURL . urlencode( '\'' . $this->keyword . '\'');
echo($request);
$process = curl_init($request);
curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($process, CURLOPT_USERPWD, $accountKey . ":" . $accountKey);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$this->response = curl_exec($process);
var_dump($this->response);
$this->results = json_decode($this->response);
var_dump($this->results);
認証が失敗する原因となる可能性があるものについて、誰か考えがありますか?