PHP:Google API:在标头中传递引荐来源?

时间:2019-06-15 07:17:31

标签: php http-headers google-api-php-client referer

我正在尝试使用Google的API来使用YouTube供稿,并且我设法使其不受限制地使用API​​密钥。问题是,这使我容易受到“配额盗窃”的影响,因此我需要使用“ HTTP引荐来源网址”限制来限制我的密钥(如Google所推荐)。

我尝试在API控制面板中添加以下所有内容作为“网站限制”:

https://*.example.com/*
http://*.example.com/*
https://example.com/*
http://example.com/*

但是当我从“ example.com”拨打电话时,出现以下错误:

(403)该请求未指定任何引用。请确保客户端正在发送引荐来源或使用API​​控制台删除引荐来源限制。

如何在请求标头中传递引用值?

我正在使用直接来自API文档的代码示例:

require_once 'google-api-php-client/src/Google/autoload.php'; // or wherever autoload.php is located

$client = new Google_Client();
$client->setApplicationName('TESTING APP NAME');
$client->setDeveloperKey('AIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxFg');

// Define service object for making API requests.
$service = new Google_Service_YouTube($client);

$queryParams = [
    'part' => 'snippet',
    'id' => 'UCQ3f82p5yb6MiA9O1LZbmEA',
    'maxResults' => 10
];

$response = $service->channels->listChannels('id,snippet,contentDetails,statistics', $queryParams);

有人可以告诉我如何通过请求传递参照值吗?

像我8岁一样向我解释。 ;)非常感谢!

1 个答案:

答案 0 :(得分:2)

就像你8岁...

您要告诉妈妈(YouTube)爸爸(您的网站)需要信息。
发出请求时,您需要明确说出以及谁在询问信息。
我在使用相同的代码时遇到了麻烦,因此决定使用curl来包含CURLOPT_REFERER

<?php
$videoId = 'oHg5SJYRHA0';   
$apikey = 'INSERT KEY HERE';
$googleApiUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' . $videoId . '&key=' . $apikey . '&part=snippet';

    $HitIt = curl_init();

    curl_setopt($HitIt, CURLOPT_REFERER, 'INSERT YOUR URL HERE');
    curl_setopt($HitIt, CURLOPT_HEADER, 0);
    curl_setopt($HitIt, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($HitIt, CURLOPT_URL, $googleApiUrl);
    curl_setopt($HitIt, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($HitIt, CURLOPT_VERBOSE, 0);
    curl_setopt($HitIt, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($HitIt);

    curl_close($HitIt);

    $data = json_decode($response);
    $value = json_decode(json_encode($data), true);

    $title = $value['items'][0]['snippet']['title'];
    $description = $value['items'][0]['snippet']['description'];

?>
   <h2><?php echo $title; ?></h2>
   <p><u>Description</u>: <?php echo $description; ?></p>