Невозможно подтвердить подлинность языка запросов визуализации Google с данным ключом аутентификации - PullRequest
0 голосов
/ 29 марта 2011

Невозможно подтвердить подлинность API таблиц Google.Я использую этот код, украденный из здесь ,

$clientlogin_url = "https://www.google.com/accounts/ClientLogin";
$clientlogin_post = array(
    "accountType" => "HOSTED_OR_GOOGLE",
    "Email"   => "MY_EMAIL@GOOGLE.COM",
    "Passwd"  => "MY_EMAIL_PASS",
    "service" => "writely",
    "source"  => "MY_APPLICATION_NAME"
);

// Initialize the curl object
$curl = curl_init($clientlogin_url);

// Set some options (some for SHTTP)
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clientlogin_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// Execute
$response = curl_exec($curl);

// Get the Auth string and save it
preg_match("/Auth=([a-z0-9_\-]+)/i", $response, $matches);
$auth = $matches[1];

echo "The auth string is: " . $auth; //this worked!

Так что это работает, и теперь у меня есть ключ Но на самом деле использую его ... с нижеуказаннымкод дает мне ошибку, не подтвержденную пользователем:

$headers = array(
    "Authorization: GoogleLogin auth=" . $auth,
    "GData-Version: 3.0",
);

$key = 'MY_KEY';

// Make the request
curl_setopt($curl, CURLOPT_URL, 'https://spreadsheets.google.com/tq?tqx=version:0.6;out:json&key='.$key);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, false);

$response = curl_exec($curl);
curl_close($curl);


var_dump ($response);

это дает мне

string(272) "google.visualization.Query.setResponse({version:'0.6',status:'error',errors:[{reason:'user_not_authenticated',message:'User not signed in',detailed_message:'\u003ca target=\u0022_blank\u0022 href=\u0022http://spreadsheets.google.com/\u0022\u003eSign in\u003c/a\u003e'}]});"

Так что, очевидно, он не может использовать ключ аутентификации для языка запросов визуализации Google .. что я делаю не так?

Большое вам спасибо!

1 Ответ

1 голос
/ 04 апреля 2011

Я бы попробовал следующие модификации в коде, который использует строку аутентификации Google:

добавить urlencode

$headers = array(  
   "Authorization: GoogleLogin auth=" . urlencode($auth),  
   "GData-Version: 3.0",  
);

и пропустить проверку SSL-сертификатов:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

Я описал свой опыт реализации аутентификации с помощью CURL в этом посте .Там вы найдете несколько советов по отладке запросов CURL.

...