2012-08-06 3 views
0

예전 Bing API에서 새 API로 응용 프로그램을 포팅했습니다. 새로운 PHP가 어떻게 작동하는지에 대한 여러 게시물을 보았습니다. 인증 문제가 발생했습니다.새로운 Bing API PHP에서 지원되지 않는 인증

$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); 

이 시도 이후 :

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와 상호 작용하는 데 사용하고있는 기능은 다음과 같습니다

는 URL에 의해 반환되는 오류입니다 나는 또한 지금 시도했다

$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); 

누군가는 au를 방아쇠를 당길 수 있던 무슨과에 관해서 아이디어가 있는가? 실패 할 증언?

+0

가능한 [Bing 검색 API 및 Azure] (http://stackoverflow.com/questions/10844463/bing-search-api-and-azure) – ManseUK

+0

불행히도 그 스레드 도움이되지 않았고, 모든 솔루션을 시도했지만 어느 누구도 나를 잡아 내지 못했습니다. –

+0

키가 실제로 있는지 확인하기 위해 헤더를 확인 했습니까? – ManseUK

답변

0

다른 팀 구성원이 내가 실제로 확인 했어야하는 변수 이름을 변경했습니다. $this->Appid$this->APPID이어야합니다.

Microsoft는

1

다음 작업을 예를 아래로 문제를 파악하는 데 도움이 '무효 APPID'의 라인을 따라하지만 뭔가를 누락 응용 프로그램 ID를위한 더 나은 오류 메시지를 제공 할 수 있지만 나는 의견 ManseUK에 말했듯 검색 API는 액세스 키를 "XXXX"로 바꿉니다. 심지어 나는 컬을 사용하여 작업을 얻기 위해 꽤 많은 시간을 낭비하지만 지역의 "CURLOPT_SSL_VERIFYPEER"의 원인을 실패했다 :(

$url = 'https://api.datamarket.azure.com/Bing/Search/Web?Query=%27xbox%27'; 
$process = curl_init($url); 
curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($process, CURLOPT_USERPWD, "username:XXXX"); 
curl_setopt($process, CURLOPT_TIMEOUT, 30); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); 
$response = curl_exec($process); 

# Deliver 
return $response; 

# Have a great day! 
curl_close($process); 
0

제안 트래픽을 줄이고 속도를 높이기 위해 :
Accept-Encoding: gzip을 추가하고 이름을 제거 base64_encode(':' . $this->APPID) 모두 필요합니다.