admin管理员组文章数量:1327849
I am loading the latest videos from a YouTube channel to WordPress, using the YouTube API:
function load_feed() {
$url = add_query_arg(
array(
'part' => 'snippet',
'channelId' => '[YouTube channel ID]',
'maxResults' => 3,
'order' => 'date',
'type' => 'video',
'key' => '[YouTube API key]'
),
''
);
$response = wp_remote_get(esc_url_raw($url));
return json_decode(wp_remote_retrieve_body($response), true);
}
Everything works well when in the API settings on Google Developers I have:
Application restrictions: None
But when I set:
Application restrictions: HTTP referrers (web sites)
Website restrictions: www.mysite/*
I get the following response from the API:
{
"error": {
"code": 403,
"message": "Requests from referer ;channelId=[Channel ID]&maxResults=3&order=date&type=video&key=[API key] are blocked.",
"errors": [
{
"message": "Requests from referer ;channelId=[Channel ID]&maxResults=3&order=date&type=video&key=[API key] are blocked.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}
It looks as though the API detects the request was made from googleapis and not from mysite, where I have the WP installation and am running the above code.
Why is this error occurring and what can I do to fix it?
I am loading the latest videos from a YouTube channel to WordPress, using the YouTube API:
function load_feed() {
$url = add_query_arg(
array(
'part' => 'snippet',
'channelId' => '[YouTube channel ID]',
'maxResults' => 3,
'order' => 'date',
'type' => 'video',
'key' => '[YouTube API key]'
),
'https://www.googleapis/youtube/v3/search'
);
$response = wp_remote_get(esc_url_raw($url));
return json_decode(wp_remote_retrieve_body($response), true);
}
Everything works well when in the API settings on Google Developers I have:
Application restrictions: None
But when I set:
Application restrictions: HTTP referrers (web sites)
Website restrictions: www.mysite/*
I get the following response from the API:
{
"error": {
"code": 403,
"message": "Requests from referer https://www.googleapis/youtube/v3/search?part=snippet&channelId=[Channel ID]&maxResults=3&order=date&type=video&key=[API key] are blocked.",
"errors": [
{
"message": "Requests from referer https://www.googleapis/youtube/v3/search?part=snippet&channelId=[Channel ID]&maxResults=3&order=date&type=video&key=[API key] are blocked.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}
It looks as though the API detects the request was made from googleapis and not from mysite, where I have the WP installation and am running the above code.
Why is this error occurring and what can I do to fix it?
Share Improve this question edited Jul 31, 2020 at 16:58 fuxia♦ 107k38 gold badges255 silver badges459 bronze badges asked Jul 31, 2020 at 11:05 AncientRoAncientRo 3663 silver badges12 bronze badges 1- This is really a question about the YouTube API, not anything to do with WordPress. Keep in mind that requests from the server aren't being referred to via a website. They're from a server. You probably need to whitelist an IP address. – Jacob Peattie Commented Jul 31, 2020 at 14:20
1 Answer
Reset to default 1If you restrict the application (or API key) by HTTP referrers, then your remote HTTP request should include a valid HTTP_REFERER
header, which wp_remote_get()
does not set by default. And you can set the header using the headers
argument like so where the array key is referer
(note that it's not double "r" as in "referrer"):
$response = wp_remote_get( esc_url_raw( $url ), array(
'headers' => [ 'referer' => home_url() ],
) );
本文标签: YouTube API 403 error when website restriction set
版权声明:本文标题:YouTube API 403 error when website restriction set 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742218389a2434988.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论