Google Contact API - недействительная цель 401
Мой проект использует php с gmail oauth и сталкивается с этой ошибкой как 401 Target Invalid, где другой проект работает нормально, используя тот же способ (другой идентификатор и секрет, но тот же домен). Например:
xxx.com/abc xxx.com/def
HTTP/1.1 401 Token invalid - Target is invalid.
Content-Type: text/html; charset=utf-8
Date: Mon, 19 May 2014 02:03:50 GMT
Expires: Mon, 19 May 2014 02:03:50 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alternate-Protocol: 443:quic
Transfer-Encoding: chunked
Как я могу решить эту проблему? Ценю любые комментарии и подсказки.
GmailOath коды
$url = 'https://www.google.com/accounts/OAuthGetRequestToken';
$params['oauth_version'] = '1.0';
$params['oauth_nonce'] = mt_rand();
$params['oauth_timestamp'] = time();
$params['oauth_consumer_key'] = $oauth->oauth_consumer_key;
$params['oauth_callback'] = $oauth->callback;
$params['scope'] = 'https://www.google.com/m8/feeds';
Обновление: я предполагаю, что это может быть проблемой. Ниже по-другому будет Content-type, где должно быть "application/json". Но понятия не имею, где их поменять...
Обновление: после дальнейшего изучения, оно будет работать только после того, как я заменил идентификатор клиента и секрет старого приложения по адресу https://console.developers.google.com/ Не важно, сколько новых приложений я пытаюсь сгенерировать ключи, это просто не работает Что происходит?
Рабочий звонок:-
[url] => https://www.google.com/m8/feeds/contacts/default/full?alt=json&max-results=1000&oauth_consumer_key=59093836836-0c8mb4u395gklok3k52cr2b0oml3gmcg.apps.googleusercontent.com&oauth_nonce=1103659829&oauth_signature=ORgJZEli8Y0b1Bv1xUwFWysdJgA%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1400465100&oauth_token=1%2FL0o-ttvJP0haJ2RF9I-jd6hOIW2-kFYiQmlNx7UWVkw&oauth_version=1.0
[content_type] => application/json; charset=UTF-8
[http_code] => 200
[header_size] => 525
[request_size] => 743
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 2.250314
[namelookup_time] => 4.7E-5
[connect_time] => 0.012625
[pretransfer_time] => 0.040877
[size_upload] => 0
[size_download] => 997382
[speed_download] => 443219
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 0.423671
[redirect_time] => 0
Не работает звонок:-
[url] => https://www.google.com/m8/feeds/contacts/default/full?alt=json&max-results=1000&oauth_consumer_key=59093836836-57psirebb7ntghd1259g4iiml5eq0l70.apps.googleusercontent.com&oauth_nonce=995553446&oauth_signature=8yPK5su1np6sC0z8vmZ%2BHOW7CuE%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1400465030&oauth_token=1%2FrDfOd04W2oUs2MHfLoFIJoVngnM0n3MWZwWMRoeFDOg&oauth_version=1.0
[content_type] => text/html; charset=utf-8
[http_code] => 401
[header_size] => 369
[request_size] => 745
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.337964
[namelookup_time] => 4.7E-5
[connect_time] => 0.017053
[pretransfer_time] => 0.054309
[size_upload] => 0
[size_download] => 11875
[speed_download] => 35136
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 0.337551
[redirect_time] => 0
Пожалуйста, попросите дополнительную информацию, если вышеуказанные вопросы не завершены. Благодарю.
2 ответа
Обнаружил решение,
Похоже, что недавно сгенерированный Client ID и Client Secret уже вышли из устаревшей версии API. Единственный способ заставить это работать - реализовать Google Contact APIv3 и использовать OAuth2.
Надеюсь, что это поможет остальным, кто имеет такие же проблемы.
401
ошибка - это HTTP-код, который гласит Unauthorized
Это означает, что запрос требует аутентификации. Смотрите здесь: 10 кодов определения статуса поиска для 401
10.4.2 401 Unauthorized
The request requires user authentication. The response MUST include a
WWW-Authenticate header field (section 14.47) containing a challenge applicable
to the requested resource. The client MAY repeat the request with a
suitable Authorization header field (section 14.8). If the request already
included Authorization credentials, then the 401 response indicates
that authorization has been refused for those credentials. If the 401 response
contains the same challenge as the prior response, and the user agent has
already attempted authentication at least once, then the user SHOULD be
presented the entity that was given in the response, since that entity might
include relevant diagnostic information. HTTP access authentication is explained
in "HTTP Authentication: Basic and Digest Access Authentication"
Обновить
Так как ваши запросы отличаются друг от друга, тот, который работает, получил доступ, а второй нет. Я проверил ваши запросы с Winmerge, и они из двух разных приложений. Таким образом, вы можете попытаться отправить через JSON первого, чтобы увидеть, что происходит.
Возможно ли, что вы не настроили другое свойство приложения, чтобы иметь доступ через Google API.
Я все еще придерживаюсь своего предыдущего ответа, потому что это вопрос кода 401, несанкционированного доступа.