Вот ещё несколько результатов. Обратите внимание, что в сообщении ниже содержится множество предположений, основанных на недостатке реальных знаний.
В следующем сообщении я изложу своё мнение о том, что происходит и что должно произойти.
Спасибо за ответ, Роберт.
Обратите внимание, что Oneboxing видео по маршруту /watch (как и раньше!) не удавалось при моих попытках, поэтому мне не потребовался цикл, чтобы вызвать сбой.
Таким образом, одно из моих предположений состоит в том, что user-agent, используемый Onebox, — это Discourse Forum Onebox v2.6.0.beta1, исходя из этого кода…
Я выбрал случайное видео и попытался использовать curl для чтения заголовков.
Я выполнил это внутри Docker-контейнера на моём работающем сайте, что дало следующий ответ.
Результат первого запроса curl через маршрут /watch?
команда
curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://m.youtube.com/watch?v=s0ONj4TG0UA"
ответ:
curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://m.youtube.com/watch?v=s0ONj4TG0UA"
HTTP/2 303
content-length: 0
p3p: CP="Это не политика P3P! Дополнительную информацию см. по адресу http://support.google.com/accounts/answer/151657?hl=en-GB"
cache-control: no-cache
x-frame-options: SAMEORIGIN
content-type: text/html; charset=utf-8
location: https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop
accept-ch-lifetime: 2592000
x-content-type-options: nosniff
accept-ch: DPR
expires: Tue, 27 Apr 1971 19:44:06 GMT
strict-transport-security: max-age=31536000
date: Fri, 07 Aug 2020 11:35:21 GMT
server: YouTube Frontend Proxy
x-xss-protection: 0
set-cookie: VISITOR_INFO1_LIVE=rcVTSJn81Ck; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:35:20 GMT; httponly; samesite=None
set-cookie: YSC=cFXIPerzT3Y; path=/; domain=.youtube.com; secure; httponly; samesite=None
set-cookie: GPS=1; path=/; domain=.youtube.com; expires=Fri, 07-Aug-2020 12:05:20 GMT
alt-svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Таким образом, я был перенаправлен с помощью ответа 303 на URL, указанный в заголовке location, который был https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop.
Это просто привело к добавлению &app=desktop к URL.
Результат второго запроса curl к перенаправленному URL — всё ещё по маршруту /watch?
команда
curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://www.youtube.com/watch?v=s0ONj4TG0UA&app=desktop"
ответ
HTTP/2 429
x-content-type-options: nosniff
expires: Tue, 27 Apr 1971 19:44:06 GMT
x-frame-options: SAMEORIGIN
cache-control: no-cache
p3p: CP="Это не политика P3P! Дополнительную информацию см. по адресу http://support.google.com/accounts/answer/151657?hl=en-GB"
accept-ch-lifetime: 2592000
content-type: text/html; charset=utf-8
accept-ch: DPR
strict-transport-security: max-age=31536000
content-length: 48982
date: Fri, 07 Aug 2020 11:46:00 GMT
server: YouTube Frontend Proxy
x-xss-protection: 0
set-cookie: VISITOR_INFO1_LIVE=VQwNuouhq-s; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:46:00 GMT; httponly; samesite=None
set-cookie: YSC=8IRfPRFRY6c; path=/; domain=.youtube.com; secure; httponly; samesite=None
set-cookie: GPS=1; path=/; domain=.youtube.com; expires=Fri, 07-Aug-2020 12:16:00 GMT
set-cookie: VISITOR_INFO1_LIVE=VQwNuouhq-s; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:46:00 GMT; httponly; samesite=None
set-cookie: YSC=8IRfPRFRY6c; path=/; domain=.youtube.com; secure; httponly; samesite=None
set-cookie: GPS=1; path=/; domain=.youtube.com; expires=Fri, 07-Aug-2020 12:16:00 GMT
alt-svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Таким образом, мне возвращается код ответа 429 «слишком много запросов», но без заголовка retry-after — прекращение без переговоров.
В любом случае, если Onebox видит именно это, он игнорирует ответ, или, по крайней мере, я не знаю, где искать его, если он где-то логируется.
Хотя это может быть допустимым действием для единичного ответа 429, получение множества ответов 429 за очень короткий промежуток времени нельзя игнорировать.
Результат третьего запроса curl — на этот раз через маршрут /embed/
Для полноты картины я сразу же попытался получить то же видео, но на этот раз через маршрут /embed/.
команда
curl --user-agent "Discourse Forum Onebox v2.6.0.beta1" -sD - -o /dev/null "https://www.youtube.com/embed/s0ONj4TG0UA"
ответ
HTTP/2 200
accept-ch-lifetime: 2592000
content-type: text/html; charset=utf-8
expires: Tue, 27 Apr 1971 19:44:06 GMT
x-content-type-options: nosniff
cache-control: no-cache
p3p: CP="Это не политика P3P! Дополнительную информацию см. по адресу http://support.google.com/accounts/answer/151657?hl=en-GB"
strict-transport-security: max-age=31536000
accept-ch: DPR
date: Fri, 07 Aug 2020 11:55:29 GMT
server: YouTube Frontend Proxy
x-xss-protection: 0
set-cookie: VISITOR_INFO1_LIVE=PNE6x6djF00; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:55:29 GMT; httponly; samesite=None
set-cookie: VISITOR_INFO1_LIVE=PNE6x6djF00; path=/; domain=.youtube.com; secure; expires=Wed, 03-Feb-2021 11:55:29 GMT; httponly; samesite=None
set-cookie: GPS=1; path=/; domain=.youtube.com; expires=Fri, 07-Aug-2020 12:25:29 GMT
set-cookie: YSC=pDW-hdbauK8; path=/; domain=.youtube.com; secure; httponly; samesite=None
alt-svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
accept-ranges: none
vary: Accept-Encoding
200 — Успех.
Плагин lazy-yt, похоже, переписывает URL в формате /watch
Не уверен, имеет ли это какое-либо значение, но… включён ли по умолчанию плагин lazy-yt для встроенного контента? Я заметил его в своей установке для разработки.
Похоже, он патчит метод to_html однобоксера YouTube.
Не знаю, важно ли это, но исходный метод to_html однобоксера возвращает формат URL /embed/…
В то время как плагин lazy-yt использует формат URL /watch?v=.
Могу ли я что-то ещё сделать, чтобы показать, что существует проблема, требующая внимания? В следующем сообщении я объясню, что, по моему мнению, является корневой причиной.