Merge pull request #863 from AudricV/add-content-type-and-content-length-headers-to-post-requests

Add Content-Type header to all POST requests without an empty body
This commit is contained in:
AudricV 2022-12-16 19:32:56 +01:00 committed by GitHub
commit d5437e0bc5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
307 changed files with 10897 additions and 10817 deletions

View File

@ -7,6 +7,8 @@ import org.schabi.newpipe.extractor.localization.Localization;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.io.IOException; import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -39,7 +41,7 @@ public abstract class Downloader {
* @param localization the source of the value of the {@code Accept-Language} header * @param localization the source of the value of the {@code Accept-Language} header
* @return the result of the GET request * @return the result of the GET request
*/ */
public Response get(final String url, @Nullable final Localization localization) public Response get(final String url, final Localization localization)
throws IOException, ReCaptchaException { throws IOException, ReCaptchaException {
return get(url, null, localization); return get(url, null, localization);
} }
@ -70,7 +72,7 @@ public abstract class Downloader {
*/ */
public Response get(final String url, public Response get(final String url,
@Nullable final Map<String, List<String>> headers, @Nullable final Map<String, List<String>> headers,
@Nullable final Localization localization) final Localization localization)
throws IOException, ReCaptchaException { throws IOException, ReCaptchaException {
return execute(Request.newBuilder() return execute(Request.newBuilder()
.get(url) .get(url)
@ -112,7 +114,7 @@ public abstract class Downloader {
* @param headers a list of headers that will be used in the request. * @param headers a list of headers that will be used in the request.
* Any default headers <b>should</b> be overridden by these. * Any default headers <b>should</b> be overridden by these.
* @param dataToSend byte array that will be sent when doing the request. * @param dataToSend byte array that will be sent when doing the request.
* @return the result of the GET request * @return the result of the POST request
*/ */
public Response post(final String url, public Response post(final String url,
@Nullable final Map<String, List<String>> headers, @Nullable final Map<String, List<String>> headers,
@ -131,12 +133,12 @@ public abstract class Downloader {
* Any default headers <b>should</b> be overridden by these. * Any default headers <b>should</b> be overridden by these.
* @param dataToSend byte array that will be sent when doing the request. * @param dataToSend byte array that will be sent when doing the request.
* @param localization the source of the value of the {@code Accept-Language} header * @param localization the source of the value of the {@code Accept-Language} header
* @return the result of the GET request * @return the result of the POST request
*/ */
public Response post(final String url, public Response post(final String url,
@Nullable final Map<String, List<String>> headers, @Nullable final Map<String, List<String>> headers,
@Nullable final byte[] dataToSend, @Nullable final byte[] dataToSend,
@Nullable final Localization localization) final Localization localization)
throws IOException, ReCaptchaException { throws IOException, ReCaptchaException {
return execute(Request.newBuilder() return execute(Request.newBuilder()
.post(url, dataToSend) .post(url, dataToSend)
@ -145,6 +147,95 @@ public abstract class Downloader {
.build()); .build());
} }
/**
* Convenient method to send a POST request using the specified value of the
* {@code Content-Type} header with a given {@link Localization}.
*
* @param url the URL that is pointing to the wanted resource
* @param headers a list of headers that will be used in the request.
* Any default headers <b>should</b> be overridden by these.
* @param dataToSend byte array that will be sent when doing the request.
* @param localization the source of the value of the {@code Accept-Language} header
* @param contentType the mime type of the body sent, which will be set as the value of the
* {@code Content-Type} header
* @return the result of the POST request
* @see #post(String, Map, byte[], Localization)
*/
public Response postWithContentType(final String url,
@Nullable final Map<String, List<String>> headers,
@Nullable final byte[] dataToSend,
final Localization localization,
final String contentType)
throws IOException, ReCaptchaException {
final Map<String, List<String>> actualHeaders = new HashMap<>();
if (headers != null) {
actualHeaders.putAll(headers);
}
actualHeaders.put("Content-Type", Collections.singletonList(contentType));
return post(url, actualHeaders, dataToSend, localization);
}
/**
* Convenient method to send a POST request using the specified value of the
* {@code Content-Type} header.
*
* @param url the URL that is pointing to the wanted resource
* @param headers a list of headers that will be used in the request.
* Any default headers <b>should</b> be overridden by these.
* @param dataToSend byte array that will be sent when doing the request.
* @param contentType the mime type of the body sent, which will be set as the value of the
* {@code Content-Type} header
* @return the result of the POST request
* @see #post(String, Map, byte[], Localization)
*/
public Response postWithContentType(final String url,
@Nullable final Map<String, List<String>> headers,
@Nullable final byte[] dataToSend,
final String contentType)
throws IOException, ReCaptchaException {
return postWithContentType(url, headers, dataToSend, NewPipe.getPreferredLocalization(),
contentType);
}
/**
* Convenient method to send a POST request the JSON mime type as the value of the
* {@code Content-Type} header with a given {@link Localization}.
*
* @param url the URL that is pointing to the wanted resource
* @param headers a list of headers that will be used in the request.
* Any default headers <b>should</b> be overridden by these.
* @param dataToSend byte array that will be sent when doing the request.
* @param localization the source of the value of the {@code Accept-Language} header
* @return the result of the POST request
* @see #post(String, Map, byte[], Localization)
*/
public Response postWithContentTypeJson(final String url,
@Nullable final Map<String, List<String>> headers,
@Nullable final byte[] dataToSend,
final Localization localization)
throws IOException, ReCaptchaException {
return postWithContentType(url, headers, dataToSend, localization, "application/json");
}
/**
* Convenient method to send a POST request the JSON mime type as the value of the
* {@code Content-Type} header.
*
* @param url the URL that is pointing to the wanted resource
* @param headers a list of headers that will be used in the request.
* Any default headers <b>should</b> be overridden by these.
* @param dataToSend byte array that will be sent when doing the request.
* @return the result of the POST request
* @see #post(String, Map, byte[], Localization)
*/
public Response postWithContentTypeJson(final String url,
@Nullable final Map<String, List<String>> headers,
@Nullable final byte[] dataToSend)
throws IOException, ReCaptchaException {
return postWithContentTypeJson(url, headers, dataToSend,
NewPipe.getPreferredLocalization());
}
/** /**
* Do a request using the specified {@link Request} object. * Do a request using the specified {@link Request} object.
* *

View File

@ -6,22 +6,23 @@ import com.grack.nanojson.JsonObject;
import com.grack.nanojson.JsonParser; import com.grack.nanojson.JsonParser;
import com.grack.nanojson.JsonParserException; import com.grack.nanojson.JsonParserException;
import com.grack.nanojson.JsonWriter; import com.grack.nanojson.JsonWriter;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.extractor.localization.DateWrapper; import org.schabi.newpipe.extractor.localization.DateWrapper;
import org.schabi.newpipe.extractor.utils.Utils;
import javax.annotation.Nullable;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.DateTimeException; import java.time.DateTimeException;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.Locale; import java.util.Locale;
import javax.annotation.Nullable;
public final class BandcampExtractorHelper { public final class BandcampExtractorHelper {
public static final String BASE_URL = "https://bandcamp.com"; public static final String BASE_URL = "https://bandcamp.com";
@ -43,8 +44,8 @@ public final class BandcampExtractorHelper {
+ "&tralbum_id=" + itemId + "&tralbum_type=" + itemType.charAt(0)) + "&tralbum_id=" + itemId + "&tralbum_type=" + itemType.charAt(0))
.responseBody(); .responseBody();
return JsonParser.object().from(jsonString) return Utils.replaceHttpWithHttps(JsonParser.object().from(jsonString)
.getString("bandcamp_url").replace("http://", "https://"); .getString("bandcamp_url"));
} catch (final JsonParserException | ReCaptchaException | IOException e) { } catch (final JsonParserException | ReCaptchaException | IOException e) {
throw new ParsingException("Ids could not be translated to URL", e); throw new ParsingException("Ids could not be translated to URL", e);
@ -60,19 +61,15 @@ public final class BandcampExtractorHelper {
*/ */
public static JsonObject getArtistDetails(final String id) throws ParsingException { public static JsonObject getArtistDetails(final String id) throws ParsingException {
try { try {
return return JsonParser.object().from(NewPipe.getDownloader().postWithContentTypeJson(
JsonParser.object().from( BASE_API_URL + "/mobile/22/band_details",
NewPipe.getDownloader().post( Collections.emptyMap(),
BASE_API_URL + "/mobile/22/band_details", JsonWriter.string()
null, .object()
JsonWriter.string() .value("band_id", id)
.object() .end()
.value("band_id", id) .done()
.end() .getBytes(StandardCharsets.UTF_8)).responseBody());
.done()
.getBytes()
).responseBody()
);
} catch (final IOException | ReCaptchaException | JsonParserException e) { } catch (final IOException | ReCaptchaException | JsonParserException e) {
throw new ParsingException("Could not download band details", e); throw new ParsingException("Could not download band details", e);
} }
@ -123,7 +120,7 @@ public final class BandcampExtractorHelper {
/** /**
* Whether the URL points to a radio kiosk. * Whether the URL points to a radio kiosk.
* @param url the URL to check * @param url the URL to check
* @return true if the URL matches <code>https://bandcamp.com/?show=SHOW_ID</code> * @return true if the URL matches {@code https://bandcamp.com/?show=SHOW_ID}
*/ */
public static boolean isRadioUrl(final String url) { public static boolean isRadioUrl(final String url) {
return url.toLowerCase().matches("https?://bandcamp\\.com/\\?show=\\d+"); return url.toLowerCase().matches("https?://bandcamp\\.com/\\?show=\\d+");

View File

@ -18,6 +18,8 @@ import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemsCollector;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.BASE_API_URL; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.BASE_API_URL;
@ -40,11 +42,11 @@ public class BandcampFeaturedExtractor extends KioskExtractor<PlaylistInfoItem>
public void onFetchPage(@Nonnull final Downloader downloader) public void onFetchPage(@Nonnull final Downloader downloader)
throws IOException, ExtractionException { throws IOException, ExtractionException {
try { try {
json = JsonParser.object().from( json = JsonParser.object().from(getDownloader().postWithContentTypeJson(
getDownloader().post( FEATURED_API_URL,
FEATURED_API_URL, null, "{\"platform\":\"\",\"version\":0}".getBytes() Collections.emptyMap(),
).responseBody() "{\"platform\":\"\",\"version\":0}".getBytes(StandardCharsets.UTF_8))
); .responseBody());
} catch (final JsonParserException e) { } catch (final JsonParserException e) {
throw new ParsingException("Could not parse Bandcamp featured API response", e); throw new ParsingException("Could not parse Bandcamp featured API response", e);
} }

View File

@ -556,13 +556,13 @@ public final class YoutubeParsingHelper {
final Map<String, List<String>> headers = new HashMap<>(); final Map<String, List<String>> headers = new HashMap<>();
headers.put("X-YouTube-Client-Name", singletonList("1")); headers.put("X-YouTube-Client-Name", singletonList("1"));
headers.put("X-YouTube-Client-Version", headers.put("X-YouTube-Client-Version", singletonList(HARDCODED_CLIENT_VERSION));
singletonList(HARDCODED_CLIENT_VERSION));
// This endpoint is fetched by the YouTube website to get the items of its main menu and is // This endpoint is fetched by the YouTube website to get the items of its main menu and is
// pretty lightweight (around 30kB) // pretty lightweight (around 30kB)
final Response response = getDownloader().post(YOUTUBEI_V1_URL + "guide?key=" final Response response = getDownloader().postWithContentTypeJson(
+ HARDCODED_KEY + DISABLE_PRETTY_PRINT_PARAMETER, headers, body); YOUTUBEI_V1_URL + "guide?key=" + HARDCODED_KEY + DISABLE_PRETTY_PRINT_PARAMETER,
headers, body);
final String responseBody = response.responseBody(); final String responseBody = response.responseBody();
final int responseCode = response.responseCode(); final int responseCode = response.responseCode();
@ -800,15 +800,12 @@ public final class YoutubeParsingHelper {
// @formatter:on // @formatter:on
final Map<String, List<String>> headers = new HashMap<>(); final Map<String, List<String>> headers = new HashMap<>();
headers.put("X-YouTube-Client-Name", singletonList( headers.put("X-YouTube-Client-Name", singletonList(HARDCODED_YOUTUBE_MUSIC_KEY[1]));
HARDCODED_YOUTUBE_MUSIC_KEY[1])); headers.put("X-YouTube-Client-Version", singletonList(HARDCODED_YOUTUBE_MUSIC_KEY[2]));
headers.put("X-YouTube-Client-Version", singletonList(
HARDCODED_YOUTUBE_MUSIC_KEY[2]));
headers.put("Origin", singletonList("https://music.youtube.com")); headers.put("Origin", singletonList("https://music.youtube.com"));
headers.put("Referer", singletonList("music.youtube.com")); headers.put("Referer", singletonList("https://music.youtube.com"));
headers.put("Content-Type", singletonList("application/json"));
final Response response = getDownloader().post(url, headers, json); final Response response = getDownloader().postWithContentTypeJson(url, headers, json);
// Ensure to have a valid response // Ensure to have a valid response
return response.responseBody().length() > 500 && response.responseCode() == 200; return response.responseBody().length() > 500 && response.responseCode() == 200;
} }
@ -1180,13 +1177,11 @@ public final class YoutubeParsingHelper {
final Localization localization) final Localization localization)
throws IOException, ExtractionException { throws IOException, ExtractionException {
final Map<String, List<String>> headers = new HashMap<>(); final Map<String, List<String>> headers = new HashMap<>();
addClientInfoHeaders(headers); addYouTubeHeaders(headers);
headers.put("Content-Type", singletonList("application/json"));
final Response response = getDownloader().post(YOUTUBEI_V1_URL + endpoint + "?key=" return JsonUtils.toJsonObject(getValidJsonResponseBody(
+ getKey() + DISABLE_PRETTY_PRINT_PARAMETER, headers, body, localization); getDownloader().postWithContentTypeJson(YOUTUBEI_V1_URL + endpoint + "?key="
+ getKey() + DISABLE_PRETTY_PRINT_PARAMETER, headers, body, localization)));
return JsonUtils.toJsonObject(getValidJsonResponseBody(response));
} }
public static JsonObject getJsonAndroidPostResponse( public static JsonObject getJsonAndroidPostResponse(
@ -1215,17 +1210,17 @@ public final class YoutubeParsingHelper {
@Nonnull final String innerTubeApiKey, @Nonnull final String innerTubeApiKey,
@Nullable final String endPartOfUrlRequest) throws IOException, ExtractionException { @Nullable final String endPartOfUrlRequest) throws IOException, ExtractionException {
final Map<String, List<String>> headers = new HashMap<>(); final Map<String, List<String>> headers = new HashMap<>();
headers.put("Content-Type", singletonList("application/json"));
headers.put("User-Agent", singletonList(userAgent)); headers.put("User-Agent", singletonList(userAgent));
headers.put("X-Goog-Api-Format-Version", singletonList("2")); headers.put("X-Goog-Api-Format-Version", singletonList("2"));
final String baseEndpointUrl = YOUTUBEI_V1_GAPIS_URL + endpoint + "?key=" + innerTubeApiKey final String baseEndpointUrl = YOUTUBEI_V1_GAPIS_URL + endpoint + "?key=" + innerTubeApiKey
+ DISABLE_PRETTY_PRINT_PARAMETER; + DISABLE_PRETTY_PRINT_PARAMETER;
final Response response = getDownloader().post(isNullOrEmpty(endPartOfUrlRequest) return JsonUtils.toJsonObject(getValidJsonResponseBody(
? baseEndpointUrl : baseEndpointUrl + endPartOfUrlRequest, getDownloader().postWithContentTypeJson(isNullOrEmpty(endPartOfUrlRequest)
headers, body, localization); ? baseEndpointUrl
return JsonUtils.toJsonObject(getValidJsonResponseBody(response)); : baseEndpointUrl + endPartOfUrlRequest,
headers, body, localization)));
} }
@Nonnull @Nonnull
@ -1428,6 +1423,16 @@ public final class YoutubeParsingHelper {
+ ")"; + ")";
} }
@Nonnull
public static Map<String, List<String>> getYoutubeMusicHeaders() {
final Map<String, List<String>> headers = new HashMap<>();
headers.put("X-YouTube-Client-Name", Collections.singletonList(youtubeMusicKey[1]));
headers.put("X-YouTube-Client-Version", Collections.singletonList(youtubeMusicKey[2]));
headers.put("Origin", Collections.singletonList("https://music.youtube.com"));
headers.put("Referer", Collections.singletonList("https://music.youtube.com"));
return headers;
}
/** /**
* Add required headers and cookies to an existing headers Map. * Add required headers and cookies to an existing headers Map.
* @see #addClientInfoHeaders(Map) * @see #addClientInfoHeaders(Map)

View File

@ -35,7 +35,6 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.addClientInfoHeaders;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getAndroidUserAgent; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getAndroidUserAgent;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getIosUserAgent; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getIosUserAgent;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isAndroidStreamingUrl; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isAndroidStreamingUrl;
@ -707,7 +706,8 @@ public final class YoutubeDashManifestCreatorsUtils {
throws CreationException { throws CreationException {
try { try {
final Map<String, List<String>> headers = new HashMap<>(); final Map<String, List<String>> headers = new HashMap<>();
addClientInfoHeaders(headers); headers.put("Origin", Collections.singletonList("https://www.youtube.com"));
headers.put("Referer", Collections.singletonList("https://www.youtube.com"));
String responseMimeType = ""; String responseMimeType = "";

View File

@ -2,12 +2,10 @@ package org.schabi.newpipe.extractor.services.youtube.extractors;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.YOUTUBEI_V1_URL; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.YOUTUBEI_V1_URL;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.addClientInfoHeaders;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getJsonPostResponse; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getJsonPostResponse;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getKey; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getKey;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getValidJsonResponseBody;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.prepareDesktopJsonBuilder; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.prepareDesktopJsonBuilder;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
@ -19,7 +17,6 @@ import org.schabi.newpipe.extractor.Page;
import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.channel.ChannelExtractor; import org.schabi.newpipe.extractor.channel.ChannelExtractor;
import org.schabi.newpipe.extractor.downloader.Downloader; import org.schabi.newpipe.extractor.downloader.Downloader;
import org.schabi.newpipe.extractor.downloader.Response;
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException; import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
import org.schabi.newpipe.extractor.exceptions.ContentNotSupportedException; import org.schabi.newpipe.extractor.exceptions.ContentNotSupportedException;
import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ExtractionException;
@ -30,15 +27,13 @@ import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelLinkHandlerFactory; import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelLinkHandlerFactory;
import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector; import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
import org.schabi.newpipe.extractor.utils.JsonUtils;
import org.schabi.newpipe.extractor.utils.Utils; import org.schabi.newpipe.extractor.utils.Utils;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Objects;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -85,8 +80,8 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
} }
@Override @Override
public void onFetchPage(@Nonnull final Downloader downloader) throws IOException, public void onFetchPage(@Nonnull final Downloader downloader)
ExtractionException { throws IOException, ExtractionException {
final String channelPath = super.getId(); final String channelPath = super.getId();
final String[] channelId = channelPath.split("/"); final String[] channelId = channelPath.split("/");
String id = ""; String id = "";
@ -103,17 +98,7 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
final JsonObject jsonResponse = getJsonPostResponse("navigation/resolve_url", final JsonObject jsonResponse = getJsonPostResponse("navigation/resolve_url",
body, getExtractorLocalization()); body, getExtractorLocalization());
if (!isNullOrEmpty(jsonResponse.getObject("error"))) { checkIfChannelResponseIsValid(jsonResponse);
final JsonObject errorJsonObject = jsonResponse.getObject("error");
final int errorCode = errorJsonObject.getInt("code");
if (errorCode == 404) {
throw new ContentNotAvailableException("This channel doesn't exist.");
} else {
throw new ContentNotAvailableException("Got error:\""
+ errorJsonObject.getString("status") + "\": "
+ errorJsonObject.getString("message"));
}
}
final JsonObject endpoint = jsonResponse.getObject("endpoint"); final JsonObject endpoint = jsonResponse.getObject("endpoint");
@ -151,17 +136,7 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
final JsonObject jsonResponse = getJsonPostResponse("browse", body, final JsonObject jsonResponse = getJsonPostResponse("browse", body,
getExtractorLocalization()); getExtractorLocalization());
if (!isNullOrEmpty(jsonResponse.getObject("error"))) { checkIfChannelResponseIsValid(jsonResponse);
final JsonObject errorJsonObject = jsonResponse.getObject("error");
final int errorCode = errorJsonObject.getInt("code");
if (errorCode == 404) {
throw new ContentNotAvailableException("This channel doesn't exist.");
} else {
throw new ContentNotAvailableException("Got error:\""
+ errorJsonObject.getString("status") + "\": "
+ errorJsonObject.getString("message"));
}
}
final JsonObject endpoint = jsonResponse.getArray("onResponseReceivedActions") final JsonObject endpoint = jsonResponse.getArray("onResponseReceivedActions")
.getObject(0) .getObject(0)
@ -199,6 +174,21 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
YoutubeParsingHelper.defaultAlertsCheck(initialData); YoutubeParsingHelper.defaultAlertsCheck(initialData);
} }
private void checkIfChannelResponseIsValid(@Nonnull final JsonObject jsonResponse)
throws ContentNotAvailableException {
if (!isNullOrEmpty(jsonResponse.getObject("error"))) {
final JsonObject errorJsonObject = jsonResponse.getObject("error");
final int errorCode = errorJsonObject.getInt("code");
if (errorCode == 404) {
throw new ContentNotAvailableException("This channel doesn't exist.");
} else {
throw new ContentNotAvailableException("Got error:\""
+ errorJsonObject.getString("status") + "\": "
+ errorJsonObject.getString("message"));
}
}
}
@Nonnull @Nonnull
@Override @Override
public String getUrl() throws ParsingException { public String getUrl() throws ParsingException {
@ -354,8 +344,8 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
} }
@Override @Override
public InfoItemsPage<StreamInfoItem> getPage(final Page page) throws IOException, public InfoItemsPage<StreamInfoItem> getPage(final Page page)
ExtractionException { throws IOException, ExtractionException {
if (page == null || isNullOrEmpty(page.getUrl())) { if (page == null || isNullOrEmpty(page.getUrl())) {
throw new IllegalArgumentException("Page doesn't contain an URL"); throw new IllegalArgumentException("Page doesn't contain an URL");
} }
@ -363,14 +353,10 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
final List<String> channelIds = page.getIds(); final List<String> channelIds = page.getIds();
final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId());
final Map<String, List<String>> headers = new HashMap<>();
addClientInfoHeaders(headers);
final Response response = getDownloader().post(page.getUrl(), null, page.getBody(), final JsonObject ajaxJson = getJsonPostResponse("browse", page.getBody(),
getExtractorLocalization()); getExtractorLocalization());
final JsonObject ajaxJson = JsonUtils.toJsonObject(getValidJsonResponseBody(response));
final JsonObject sectionListContinuation = ajaxJson.getArray("onResponseReceivedActions") final JsonObject sectionListContinuation = ajaxJson.getArray("onResponseReceivedActions")
.getObject(0) .getObject(0)
.getObject("appendContinuationItemsAction"); .getObject("appendContinuationItemsAction");
@ -383,8 +369,8 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
@Nullable @Nullable
private Page getNextPageFrom(final JsonObject continuations, private Page getNextPageFrom(final JsonObject continuations,
final List<String> channelIds) throws IOException, final List<String> channelIds)
ExtractionException { throws IOException, ExtractionException {
if (isNullOrEmpty(continuations)) { if (isNullOrEmpty(continuations)) {
return null; return null;
} }
@ -462,39 +448,43 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
@Nullable @Nullable
private JsonObject getVideoTab() throws ParsingException { private JsonObject getVideoTab() throws ParsingException {
if (this.videoTab != null) { if (videoTab != null) {
return this.videoTab; return videoTab;
} }
final JsonArray tabs = initialData.getObject("contents") final JsonArray tabs = initialData.getObject("contents")
.getObject("twoColumnBrowseResultsRenderer") .getObject("twoColumnBrowseResultsRenderer")
.getArray("tabs"); .getArray("tabs");
JsonObject foundVideoTab = null; final JsonObject foundVideoTab = tabs.stream()
for (final Object tab : tabs) { .filter(Objects::nonNull)
if (((JsonObject) tab).has("tabRenderer")) { .filter(JsonObject.class::isInstance)
if (((JsonObject) tab).getObject("tabRenderer").getString("title", .map(JsonObject.class::cast)
"").equals("Videos")) { .filter(tab -> tab.has("tabRenderer")
foundVideoTab = ((JsonObject) tab).getObject("tabRenderer"); && tab.getObject("tabRenderer")
break; .getString("title", "")
} .equals("Videos"))
} .findFirst()
} .map(tab -> tab.getObject("tabRenderer"))
.orElseThrow(
() -> new ContentNotSupportedException("This channel has no Videos tab"));
if (foundVideoTab == null) { final String messageRendererText = getTextFromObject(
throw new ContentNotSupportedException("This channel has no Videos tab"); foundVideoTab.getObject("content")
} .getObject("sectionListRenderer")
.getArray("contents")
final String messageRendererText = getTextFromObject(foundVideoTab.getObject("content") .getObject(0)
.getObject("sectionListRenderer").getArray("contents").getObject(0) .getObject("itemSectionRenderer")
.getObject("itemSectionRenderer").getArray("contents").getObject(0) .getArray("contents")
.getObject("messageRenderer").getObject("text")); .getObject(0)
.getObject("messageRenderer")
.getObject("text"));
if (messageRendererText != null if (messageRendererText != null
&& messageRendererText.equals("This channel has no videos.")) { && messageRendererText.equals("This channel has no videos.")) {
return null; return null;
} }
this.videoTab = foundVideoTab; videoTab = foundVideoTab;
return foundVideoTab; return foundVideoTab;
} }
} }

View File

@ -92,8 +92,9 @@ public class YoutubeMixPlaylistExtractor extends PlaylistExtractor {
// Cookie is required due to consent // Cookie is required due to consent
addYouTubeHeaders(headers); addYouTubeHeaders(headers);
final Response response = getDownloader().post(YOUTUBEI_V1_URL + "next?key=" + getKey() final Response response = getDownloader().postWithContentTypeJson(
+ DISABLE_PRETTY_PRINT_PARAMETER, headers, body, localization); YOUTUBEI_V1_URL + "next?key=" + getKey() + DISABLE_PRETTY_PRINT_PARAMETER,
headers, body, localization);
initialData = JsonUtils.toJsonObject(getValidJsonResponseBody(response)); initialData = JsonUtils.toJsonObject(getValidJsonResponseBody(response));
playlistData = initialData playlistData = initialData
@ -225,8 +226,8 @@ public class YoutubeMixPlaylistExtractor extends PlaylistExtractor {
// Cookie is required due to consent // Cookie is required due to consent
addYouTubeHeaders(headers); addYouTubeHeaders(headers);
final Response response = getDownloader().post(page.getUrl(), headers, page.getBody(), final Response response = getDownloader().postWithContentTypeJson(page.getUrl(), headers,
getExtractorLocalization()); page.getBody(), getExtractorLocalization());
final JsonObject ajaxJson = JsonUtils.toJsonObject(getValidJsonResponseBody(response)); final JsonObject ajaxJson = JsonUtils.toJsonObject(getValidJsonResponseBody(response));
final JsonObject playlistJson = ajaxJson.getObject("contents") final JsonObject playlistJson = ajaxJson.getObject("contents")
.getObject("twoColumnWatchNextResults").getObject("playlist").getObject("playlist"); .getObject("twoColumnWatchNextResults").getObject("playlist").getObject("playlist");

View File

@ -5,6 +5,7 @@ import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromNavigationEndpoint; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromNavigationEndpoint;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getValidJsonResponseBody; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getValidJsonResponseBody;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getYoutubeMusicHeaders;
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_ALBUMS; import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_ALBUMS;
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_ARTISTS; import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_ARTISTS;
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_PLAYLISTS; import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.MUSIC_PLAYLISTS;
@ -39,9 +40,7 @@ import org.schabi.newpipe.extractor.utils.Utils;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@ -116,15 +115,8 @@ public class YoutubeMusicSearchExtractor extends SearchExtractor {
.end().done().getBytes(StandardCharsets.UTF_8); .end().done().getBytes(StandardCharsets.UTF_8);
// @formatter:on // @formatter:on
final Map<String, List<String>> headers = new HashMap<>(); final String responseBody = getValidJsonResponseBody(
headers.put("X-YouTube-Client-Name", Collections.singletonList(youtubeMusicKeys[1])); getDownloader().postWithContentTypeJson(url, getYoutubeMusicHeaders(), json));
headers.put("X-YouTube-Client-Version", Collections.singletonList(youtubeMusicKeys[2]));
headers.put("Origin", Collections.singletonList("https://music.youtube.com"));
headers.put("Referer", Collections.singletonList("music.youtube.com"));
headers.put("Content-Type", Collections.singletonList("application/json"));
final String responseBody = getValidJsonResponseBody(getDownloader().post(url, headers,
json));
try { try {
initialData = JsonParser.object().from(responseBody); initialData = JsonParser.object().from(responseBody);
@ -251,15 +243,9 @@ public class YoutubeMusicSearchExtractor extends SearchExtractor {
.end().done().getBytes(StandardCharsets.UTF_8); .end().done().getBytes(StandardCharsets.UTF_8);
// @formatter:on // @formatter:on
final Map<String, List<String>> headers = new HashMap<>(); final String responseBody = getValidJsonResponseBody(
headers.put("X-YouTube-Client-Name", Collections.singletonList(youtubeMusicKeys[1])); getDownloader().postWithContentTypeJson(
headers.put("X-YouTube-Client-Version", Collections.singletonList(youtubeMusicKeys[2])); page.getUrl(), getYoutubeMusicHeaders(), json));
headers.put("Origin", Collections.singletonList("https://music.youtube.com"));
headers.put("Referer", Collections.singletonList("music.youtube.com"));
headers.put("Content-Type", Collections.singletonList("application/json"));
final String responseBody = getValidJsonResponseBody(getDownloader().post(page.getUrl(),
headers, json));
final JsonObject ajaxJson; final JsonObject ajaxJson;
try { try {

View File

@ -2,25 +2,21 @@ package org.schabi.newpipe.extractor.services.youtube.extractors;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.DISABLE_PRETTY_PRINT_PARAMETER;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.YOUTUBEI_V1_URL; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.YOUTUBEI_V1_URL;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.addClientInfoHeaders;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.extractPlaylistTypeFromPlaylistUrl; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.extractPlaylistTypeFromPlaylistUrl;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getJsonPostResponse; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getJsonPostResponse;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getKey; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getKey;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromNavigationEndpoint; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromNavigationEndpoint;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getValidJsonResponseBody;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.prepareDesktopJsonBuilder; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.prepareDesktopJsonBuilder;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import com.grack.nanojson.JsonArray; import com.grack.nanojson.JsonArray;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import com.grack.nanojson.JsonWriter; import com.grack.nanojson.JsonWriter;
import org.schabi.newpipe.extractor.Page; import org.schabi.newpipe.extractor.Page;
import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.downloader.Downloader; import org.schabi.newpipe.extractor.downloader.Downloader;
import org.schabi.newpipe.extractor.downloader.Response;
import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
@ -31,17 +27,12 @@ import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper; import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector; import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
import org.schabi.newpipe.extractor.utils.JsonUtils;
import org.schabi.newpipe.extractor.utils.Utils; import org.schabi.newpipe.extractor.utils.Utils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class YoutubePlaylistExtractor extends PlaylistExtractor { public class YoutubePlaylistExtractor extends PlaylistExtractor {
// Names of some objects in JSON response frequently used in this class // Names of some objects in JSON response frequently used in this class
@ -349,12 +340,9 @@ public class YoutubePlaylistExtractor extends PlaylistExtractor {
} }
final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId());
final Map<String, List<String>> headers = new HashMap<>();
addClientInfoHeaders(headers);
final Response response = getDownloader().post(page.getUrl(), headers, page.getBody(), final JsonObject ajaxJson = getJsonPostResponse("browse", page.getBody(),
getExtractorLocalization()); getExtractorLocalization());
final JsonObject ajaxJson = JsonUtils.toJsonObject(getValidJsonResponseBody(response));
final JsonArray continuation = ajaxJson.getArray("onResponseReceivedActions") final JsonArray continuation = ajaxJson.getArray("onResponseReceivedActions")
.getObject(0) .getObject(0)

View File

@ -5,7 +5,6 @@ import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getJsonPostResponse; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getJsonPostResponse;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getKey; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getKey;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getValidJsonResponseBody;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.prepareDesktopJsonBuilder; import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.prepareDesktopJsonBuilder;
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.getSearchParameter; import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory.getSearchParameter;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
@ -13,8 +12,6 @@ import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import com.grack.nanojson.JsonArray; import com.grack.nanojson.JsonArray;
import com.grack.nanojson.JsonBuilder; import com.grack.nanojson.JsonBuilder;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import com.grack.nanojson.JsonParser;
import com.grack.nanojson.JsonParserException;
import com.grack.nanojson.JsonWriter; import com.grack.nanojson.JsonWriter;
import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.InfoItem;
@ -34,10 +31,10 @@ import org.schabi.newpipe.extractor.utils.JsonUtils;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List; import java.util.List;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable;
/* /*
* Created by Christian Schabesberger on 22.07.2018 * Created by Christian Schabesberger on 22.07.2018
@ -105,10 +102,14 @@ public class YoutubeSearchExtractor extends SearchExtractor {
@Override @Override
public String getSearchSuggestion() throws ParsingException { public String getSearchSuggestion() throws ParsingException {
final JsonObject itemSectionRenderer = initialData.getObject("contents") final JsonObject itemSectionRenderer = initialData.getObject("contents")
.getObject("twoColumnSearchResultsRenderer").getObject("primaryContents") .getObject("twoColumnSearchResultsRenderer")
.getObject("sectionListRenderer").getArray("contents").getObject(0) .getObject("primaryContents")
.getObject("sectionListRenderer")
.getArray("contents")
.getObject(0)
.getObject("itemSectionRenderer"); .getObject("itemSectionRenderer");
final JsonObject didYouMeanRenderer = itemSectionRenderer.getArray("contents").getObject(0) final JsonObject didYouMeanRenderer = itemSectionRenderer.getArray("contents")
.getObject(0)
.getObject("didYouMeanRenderer"); .getObject("didYouMeanRenderer");
final JsonObject showingResultsForRenderer = itemSectionRenderer.getArray("contents") final JsonObject showingResultsForRenderer = itemSectionRenderer.getArray("contents")
.getObject(0) .getObject(0)
@ -138,8 +139,10 @@ public class YoutubeSearchExtractor extends SearchExtractor {
@Override @Override
public List<MetaInfo> getMetaInfo() throws ParsingException { public List<MetaInfo> getMetaInfo() throws ParsingException {
return YoutubeParsingHelper.getMetaInfo( return YoutubeParsingHelper.getMetaInfo(
initialData.getObject("contents").getObject("twoColumnSearchResultsRenderer") initialData.getObject("contents")
.getObject("primaryContents").getObject("sectionListRenderer") .getObject("twoColumnSearchResultsRenderer")
.getObject("primaryContents")
.getObject("sectionListRenderer")
.getArray("contents")); .getArray("contents"));
} }
@ -149,20 +152,23 @@ public class YoutubeSearchExtractor extends SearchExtractor {
final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId());
final JsonArray sections = initialData.getObject("contents") final JsonArray sections = initialData.getObject("contents")
.getObject("twoColumnSearchResultsRenderer").getObject("primaryContents") .getObject("twoColumnSearchResultsRenderer")
.getObject("sectionListRenderer").getArray("contents"); .getObject("primaryContents")
.getObject("sectionListRenderer")
.getArray("contents");
Page nextPage = null; Page nextPage = null;
for (final Object section : sections) { for (final Object section : sections) {
if (((JsonObject) section).has("itemSectionRenderer")) { final JsonObject sectionJsonObject = (JsonObject) section;
final JsonObject itemSectionRenderer = ((JsonObject) section) if (sectionJsonObject.has("itemSectionRenderer")) {
.getObject("itemSectionRenderer"); final JsonObject itemSectionRenderer =
sectionJsonObject.getObject("itemSectionRenderer");
collectStreamsFrom(collector, itemSectionRenderer.getArray("contents")); collectStreamsFrom(collector, itemSectionRenderer.getArray("contents"));
} else if (((JsonObject) section).has("continuationItemRenderer")) { } else if (sectionJsonObject.has("continuationItemRenderer")) {
nextPage = getNextPageFrom(((JsonObject) section) nextPage = getNextPageFrom(
.getObject("continuationItemRenderer")); sectionJsonObject.getObject("continuationItemRenderer"));
} }
} }
@ -187,22 +193,16 @@ public class YoutubeSearchExtractor extends SearchExtractor {
.getBytes(StandardCharsets.UTF_8); .getBytes(StandardCharsets.UTF_8);
// @formatter:on // @formatter:on
final String responseBody = getValidJsonResponseBody(getDownloader().post( final JsonObject ajaxJson = getJsonPostResponse("search", json, localization);
page.getUrl(), new HashMap<>(), json));
final JsonObject ajaxJson;
try {
ajaxJson = JsonParser.object().from(responseBody);
} catch (final JsonParserException e) {
throw new ParsingException("Could not parse JSON", e);
}
final JsonArray continuationItems = ajaxJson.getArray("onResponseReceivedCommands") final JsonArray continuationItems = ajaxJson.getArray("onResponseReceivedCommands")
.getObject(0).getObject("appendContinuationItemsAction") .getObject(0)
.getObject("appendContinuationItemsAction")
.getArray("continuationItems"); .getArray("continuationItems");
final JsonArray contents = continuationItems.getObject(0) final JsonArray contents = continuationItems.getObject(0)
.getObject("itemSectionRenderer").getArray("contents"); .getObject("itemSectionRenderer")
.getArray("contents");
collectStreamsFrom(collector, contents); collectStreamsFrom(collector, contents);
return new InfoItemsPage<>(collector, getNextPageFrom(continuationItems.getObject(1) return new InfoItemsPage<>(collector, getNextPageFrom(continuationItems.getObject(1)
@ -210,28 +210,30 @@ public class YoutubeSearchExtractor extends SearchExtractor {
} }
private void collectStreamsFrom(final MultiInfoItemsCollector collector, private void collectStreamsFrom(final MultiInfoItemsCollector collector,
final JsonArray contents) throws NothingFoundException, @Nonnull final JsonArray contents)
ParsingException { throws NothingFoundException, ParsingException {
final TimeAgoParser timeAgoParser = getTimeAgoParser(); final TimeAgoParser timeAgoParser = getTimeAgoParser();
for (final Object content : contents) { for (final Object content : contents) {
final JsonObject item = (JsonObject) content; final JsonObject item = (JsonObject) content;
if (item.has("backgroundPromoRenderer")) { if (item.has("backgroundPromoRenderer")) {
throw new NothingFoundException(getTextFromObject( throw new NothingFoundException(
item.getObject("backgroundPromoRenderer").getObject("bodyText"))); getTextFromObject(item.getObject("backgroundPromoRenderer")
.getObject("bodyText")));
} else if (item.has("videoRenderer")) { } else if (item.has("videoRenderer")) {
collector.commit(new YoutubeStreamInfoItemExtractor(item collector.commit(new YoutubeStreamInfoItemExtractor(
.getObject("videoRenderer"), timeAgoParser)); item.getObject("videoRenderer"), timeAgoParser));
} else if (item.has("channelRenderer")) { } else if (item.has("channelRenderer")) {
collector.commit(new YoutubeChannelInfoItemExtractor(item collector.commit(new YoutubeChannelInfoItemExtractor(
.getObject("channelRenderer"))); item.getObject("channelRenderer")));
} else if (item.has("playlistRenderer")) { } else if (item.has("playlistRenderer")) {
collector.commit(new YoutubePlaylistInfoItemExtractor(item collector.commit(new YoutubePlaylistInfoItemExtractor(
.getObject("playlistRenderer"))); item.getObject("playlistRenderer")));
} }
} }
} }
@Nullable
private Page getNextPageFrom(final JsonObject continuationItemRenderer) throws IOException, private Page getNextPageFrom(final JsonObject continuationItemRenderer) throws IOException,
ExtractionException { ExtractionException {
if (isNullOrEmpty(continuationItemRenderer)) { if (isNullOrEmpty(continuationItemRenderer)) {
@ -239,7 +241,8 @@ public class YoutubeSearchExtractor extends SearchExtractor {
} }
final String token = continuationItemRenderer.getObject("continuationEndpoint") final String token = continuationItemRenderer.getObject("continuationEndpoint")
.getObject("continuationCommand").getString("token"); .getObject("continuationCommand")
.getString("token");
final String url = YOUTUBEI_V1_URL + "search?key=" + getKey() final String url = YOUTUBEI_V1_URL + "search?key=" + getKey()
+ DISABLE_PRETTY_PRINT_PARAMETER; + DISABLE_PRETTY_PRINT_PARAMETER;

View File

@ -271,7 +271,7 @@ public class YoutubeSearchExtractorTest {
Description.PLAIN_TEXT), Description.PLAIN_TEXT),
Collections.singletonList( Collections.singletonList(
new URL("https://www.who.int/emergencies/diseases/novel-coronavirus-2019")), new URL("https://www.who.int/emergencies/diseases/novel-coronavirus-2019")),
Collections.singletonList("LEARN MORE") Collections.singletonList("Learn more")
)); ));
} }
// testMoreRelatedItems is broken because a video has no duration shown // testMoreRelatedItems is broken because a video has no duration shown

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:15:42 GMT" "Tue, 22 Nov 2022 10:40:53 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:15:42 GMT" "Tue, 22 Nov 2022 10:40:53 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dzvoZRVLWdUQ; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dKWKE6LaMJTE; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:15:42 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:53 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+621; expires\u003dSun, 11-Aug-2024 17:15:42 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+649; expires\u003dThu, 21-Nov-2024 10:40:53 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -41,10 +41,10 @@
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 17:40:55 GMT" "Tue, 22 Nov 2022 10:40:09 GMT"
], ],
"expires": [ "expires": [
"Wed, 02 Nov 2022 17:40:55 GMT" "Tue, 22 Nov 2022 10:40:09 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
@ -59,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003d6aCd9lqn2z8; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dzHVq5e9PsrU; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dThu, 06-Feb-2020 17:40:55 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:09 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+174; expires\u003dFri, 01-Nov-2024 17:40:54 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+815; expires\u003dThu, 21-Nov-2024 10:40:09 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -6,14 +6,17 @@
"Origin": [ "Origin": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Name": [ "Cookie": [
"1" "CONSENT\u003dPENDING+488"
], ],
"Referer": [ "Referer": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Version": [ "X-YouTube-Client-Version": [
"2.20221101.00.00" "2.20221118.01.00"
],
"X-YouTube-Client-Name": [
"1"
], ],
"Content-Type": [ "Content-Type": [
"application/json" "application/json"
@ -207,11 +210,11 @@
50, 50,
49, 49,
49, 49,
48,
49, 49,
56,
46, 46,
48, 48,
48, 49,
46, 46,
48, 48,
48, 48,
@ -338,20 +341,11 @@
"application/json; charset\u003dUTF-8" "application/json; charset\u003dUTF-8"
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 17:40:55 GMT" "Tue, 22 Nov 2022 10:40:10 GMT"
],
"expires": [
"Wed, 02 Nov 2022 17:40:55 GMT"
],
"p3p": [
"CP\u003d\"This is not a P3P policy! See g.co/p3phelp for more info.\""
], ],
"server": [ "server": [
"scaffolding on HTTPServer2" "scaffolding on HTTPServer2"
], ],
"set-cookie": [
"CONSENT\u003dPENDING+984; expires\u003dFri, 01-Nov-2024 17:40:55 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
],
"vary": [ "vary": [
"Origin", "Origin",
"X-Origin", "X-Origin",
@ -367,7 +361,7 @@
"0" "0"
] ]
}, },
"responseBody": "{\"responseContext\":{\"visitorData\":\"CgtJUUxxcnRoM214WSin14qbBg%3D%3D\",\"serviceTrackingParams\":[{\"service\":\"CSI\",\"params\":[{\"key\":\"c\",\"value\":\"WEB\"},{\"key\":\"cver\",\"value\":\"2.20221101.00.00\"},{\"key\":\"yt_li\",\"value\":\"0\"},{\"key\":\"ResolveUrl_rid\",\"value\":\"0x7b414305caad8bf8\"}]},{\"service\":\"GFEEDBACK\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"},{\"key\":\"e\",\"value\":\"1714257,23804281,23882502,23885487,23918597,23934970,23946420,23966208,23983296,23986016,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036947,24077241,24080738,24120820,24135310,24140247,24152443,24161116,24162920,24164186,24166867,24169501,24181174,24184446,24185614,24187043,24187377,24191629,24199724,24206234,24209350,24211178,24219713,24229161,24230618,24241378,24246502,24248092,24254502,24255165,24255543,24255545,24260783,24262346,24263796,24265820,24267564,24267570,24268142,24269410,24278596,24279196,24279540,24279628,24282828,24283093,24283556,24286003,24286019,24287169,24287327,24287795,24288047,24288489,24288912,24290289,24290971,24291857,24292739,24292955,24299747,24390674,24391539,24392268,24392399,24392496,24393382,24394548,24395541,24396645,24396818,24398124,24398996,24400009,24400945,24401557,24406381,24406604,24406983,24407199,24407452,24408951,24411026,39322399,39322504,39322574\"}]},{\"service\":\"GUIDED_HELP\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"}]},{\"service\":\"ECATCHER\",\"params\":[{\"key\":\"client.version\",\"value\":\"2.20221101\"},{\"key\":\"client.name\",\"value\":\"WEB\"},{\"key\":\"client.fexp\",\"value\":\"24185614,24036947,24199724,24391539,24268142,24396645,24406604,24164186,24282828,24299747,24187043,24392399,24291857,24219713,24394548,24288489,24152443,24080738,24406983,39322399,24191629,39322504,24140247,24286003,24209350,24265820,23983296,24255545,24254502,24287327,24287169,24400009,24286019,23882502,24279196,24279540,24255543,24396818,23946420,23986016,23918597,24411026,23885487,24279628,24002022,24034168,23966208,24269410,24181174,24169501,24267570,24290971,24161116,24398124,24001373,24292955,24120820,1714257,23804281,24278596,24077241,24262346,24287795,24002025,24248092,24392496,24398996,24400945,24283093,24241378,24406381,24263796,24267564,24392268,24288912,24162920,24260783,24166867,24407452,24184446,24407199,24229161,24230618,24290289,24408951,39322574,23998056,24288047,24211178,24007246,24135310,24401557,24206234,23934970,24393382,24283556,24395541,24004644,24255165,24292739,24246502,24390674,24187377\"}]}],\"mainAppWebResponseContext\":{\"loggedOut\":true},\"webResponseContextExtensionData\":{\"hasDecorated\":true}},\"endpoint\":{\"clickTrackingParams\":\"IhMI157_vYWQ-wIVjs5VCh2k1A1NMghleHRlcm5hbA\u003d\u003d\",\"commandMetadata\":{\"webCommandMetadata\":{\"url\":\"/youtubei/v1/navigation/resolve_url\",\"webPageType\":\"WEB_PAGE_TYPE_CHANNEL\",\"rootVe\":3611,\"apiUrl\":\"/youtubei/v1/browse\"},\"resolveUrlCommandMetadata\":{\"isVanityUrl\":true}},\"browseEndpoint\":{\"browseId\":\"UC6nSFpj9HTCZ5t-N3Rm3-HA\",\"params\":\"EgC4AQDyBgQKAjIA\"}}}", "responseBody": "{\"responseContext\":{\"visitorData\":\"CgtBeEFQY2FQVVkzSSiKzvKbBg%3D%3D\",\"serviceTrackingParams\":[{\"service\":\"CSI\",\"params\":[{\"key\":\"c\",\"value\":\"WEB\"},{\"key\":\"cver\",\"value\":\"2.20221118.01.00\"},{\"key\":\"yt_li\",\"value\":\"0\"},{\"key\":\"ResolveUrl_rid\",\"value\":\"0x1757a4c0093ffdd1\"}]},{\"service\":\"GFEEDBACK\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"},{\"key\":\"e\",\"value\":\"1714243,23804281,23882502,23918597,23934970,23946420,23966208,23974157,23983296,23986030,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036947,24077241,24080738,24108447,24120820,24135310,24140247,24152443,24161116,24162920,24164186,24166867,24169501,24181174,24187043,24187377,24191629,24199724,24211178,24217229,24219713,24228637,24229161,24236210,24241378,24248092,24254502,24255165,24255543,24255545,24260783,24262346,24263136,24263796,24267564,24268142,24269412,24278596,24279196,24282153,24283093,24283656,24287327,24287603,24288047,24288912,24290971,24291857,24292955,24293803,24298324,24299747,24390674,24390916,24391543,24392059,24392401,24396645,24398988,24401013,24401557,24403200,24406314,24406361,24406605,24407200,24407665,24408833,24413358,24413818,24414074,24414162,24415864,24415866,24416291,24417237,24417274,24417486,24418781,24420756,24421162,24425063,39322504,39322574\"}]},{\"service\":\"GUIDED_HELP\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"}]},{\"service\":\"ECATCHER\",\"params\":[{\"key\":\"client.version\",\"value\":\"2.20221118\"},{\"key\":\"client.name\",\"value\":\"WEB\"},{\"key\":\"client.fexp\",\"value\":\"24279196,24287603,24392059,24282153,24002022,24283656,23934970,24164186,24187043,39322504,24396645,24268142,24298324,23986030,24211178,24254502,24217229,24278596,24236210,24420756,24292955,24417486,24401013,24255545,24001373,24417237,24161116,1714243,24290971,24191629,24415864,24408833,24407200,24421162,24269412,24283093,23974157,24401557,24199724,24288912,24406361,24002025,24418781,39322574,24036947,24187377,24390674,24403200,24080738,24255165,24108447,24219713,24390916,24166867,24260783,24291857,23918597,24263796,24241378,24267564,24417274,24162920,24248092,24288047,24262346,24135310,24287327,24415866,24263136,24392401,24416291,24425063,24004644,23998056,24077241,24293803,24007246,24406314,24034168,24414074,24228637,24255543,23946420,24413358,24413818,24406605,24414162,24398988,23882502,24299747,23804281,23983296,24140247,24120820,24407665,24391543,23966208,24229161,24152443,24169501,24181174\"}]}],\"mainAppWebResponseContext\":{\"loggedOut\":true},\"webResponseContextExtensionData\":{\"hasDecorated\":true}},\"endpoint\":{\"clickTrackingParams\":\"IhMI-P_M3szB-wIVxk_gCh23sgBPMghleHRlcm5hbA\u003d\u003d\",\"commandMetadata\":{\"webCommandMetadata\":{\"url\":\"/youtubei/v1/navigation/resolve_url\",\"webPageType\":\"WEB_PAGE_TYPE_CHANNEL\",\"rootVe\":3611,\"apiUrl\":\"/youtubei/v1/browse\"},\"resolveUrlCommandMetadata\":{\"isVanityUrl\":true}},\"browseEndpoint\":{\"browseId\":\"UC6nSFpj9HTCZ5t-N3Rm3-HA\",\"params\":\"EgC4AQDyBgQKAjIA\"}}}",
"latestUrl": "https://www.youtube.com/youtubei/v1/navigation/resolve_url?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8\u0026prettyPrint\u003dfalse" "latestUrl": "https://www.youtube.com/youtubei/v1/navigation/resolve_url?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8\u0026prettyPrint\u003dfalse"
} }
} }

View File

@ -41,10 +41,10 @@
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 17:41:36 GMT" "Tue, 22 Nov 2022 10:40:04 GMT"
], ],
"expires": [ "expires": [
"Wed, 02 Nov 2022 17:41:36 GMT" "Tue, 22 Nov 2022 10:40:04 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
@ -59,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dfWbtROgs3nc; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003diUDF-c9d_Kc; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dThu, 06-Feb-2020 17:41:36 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:04 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+681; expires\u003dFri, 01-Nov-2024 17:41:36 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+907; expires\u003dThu, 21-Nov-2024 10:40:04 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -6,14 +6,17 @@
"Origin": [ "Origin": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Name": [ "Cookie": [
"1" "CONSENT\u003dPENDING+488"
], ],
"Referer": [ "Referer": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Version": [ "X-YouTube-Client-Version": [
"2.20221101.00.00" "2.20221118.01.00"
],
"X-YouTube-Client-Name": [
"1"
], ],
"Content-Type": [ "Content-Type": [
"application/json" "application/json"
@ -207,11 +210,11 @@
50, 50,
49, 49,
49, 49,
48,
49, 49,
56,
46, 46,
48, 48,
48, 49,
46, 46,
48, 48,
48, 48,
@ -350,20 +353,11 @@
"application/json; charset\u003dUTF-8" "application/json; charset\u003dUTF-8"
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 17:41:37 GMT" "Tue, 22 Nov 2022 10:40:04 GMT"
],
"expires": [
"Wed, 02 Nov 2022 17:41:37 GMT"
],
"p3p": [
"CP\u003d\"This is not a P3P policy! See g.co/p3phelp for more info.\""
], ],
"server": [ "server": [
"scaffolding on HTTPServer2" "scaffolding on HTTPServer2"
], ],
"set-cookie": [
"CONSENT\u003dPENDING+973; expires\u003dFri, 01-Nov-2024 17:41:37 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
],
"vary": [ "vary": [
"Origin", "Origin",
"X-Origin", "X-Origin",
@ -379,7 +373,7 @@
"0" "0"
] ]
}, },
"responseBody": "{\"responseContext\":{\"visitorData\":\"CgtGdWh1NWpMNXoxWSjR14qbBg%3D%3D\",\"serviceTrackingParams\":[{\"service\":\"CSI\",\"params\":[{\"key\":\"c\",\"value\":\"WEB\"},{\"key\":\"cver\",\"value\":\"2.20221101.00.00\"},{\"key\":\"yt_li\",\"value\":\"0\"},{\"key\":\"ResolveUrl_rid\",\"value\":\"0x62d32ded0260e003\"}]},{\"service\":\"GFEEDBACK\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"},{\"key\":\"e\",\"value\":\"1714257,9405961,23804281,23882685,23918597,23934970,23946420,23966208,23983296,23986032,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036948,24077241,24080738,24117399,24120819,24135310,24135692,24140247,24147968,24152442,24161116,24162919,24164186,24166867,24169501,24175559,24181174,24185614,24187043,24187377,24191629,24199724,24211178,24211853,24219713,24229161,24241378,24248092,24254502,24255165,24255543,24255545,24260106,24260783,24262346,24263796,24265820,24266635,24267564,24267570,24268142,24278596,24279196,24279540,24279628,24283093,24283556,24286003,24286010,24286019,24287327,24287795,24288047,24288912,24290971,24291585,24291857,24292955,24298084,24299747,24299873,24390674,24391537,24392405,24393382,24396645,24396819,24397913,24398124,24398706,24400185,24400844,24401557,24406381,24406983,24407200,39322399,39322504,39322574\"}]},{\"service\":\"GUIDED_HELP\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"}]},{\"service\":\"ECATCHER\",\"params\":[{\"key\":\"client.version\",\"value\":\"2.20221101\"},{\"key\":\"client.name\",\"value\":\"WEB\"},{\"key\":\"client.fexp\",\"value\":\"24002025,24287795,24199724,24268142,24283093,24396645,24288912,24166867,24400185,24117399,24219713,24266635,9405961,24406983,24080738,39322399,24398706,39322504,24265820,24036948,24255545,24254502,24162919,23998056,24288047,24007246,24255543,23946420,24135310,23918597,23986032,23966208,24298084,24397913,24283556,24267570,24004644,24398124,23804281,24187377,24077241,24262346,24248092,24185614,24241378,24396819,24406381,24263796,24299747,24135692,24164186,24267564,24260783,24187043,24291857,24191629,24229161,24286010,24140247,24286003,23983296,24391537,24287327,39322574,24286019,24279196,24175559,24211178,24120819,24400844,24279540,24401557,24291585,24407200,24002022,24279628,23882685,24034168,24393382,23934970,24260106,24181174,24392405,24169501,24161116,24290971,24255165,24001373,24152442,1714257,24292955,24299873,24278596,24390674,24147968,24211853\"}]}],\"mainAppWebResponseContext\":{\"loggedOut\":true},\"webResponseContextExtensionData\":{\"hasDecorated\":true}},\"endpoint\":{\"clickTrackingParams\":\"IhMIq6fi0YWQ-wIVGUN6BR0tuwZEMghleHRlcm5hbA\u003d\u003d\",\"commandMetadata\":{\"webCommandMetadata\":{\"url\":\"/youtubei/v1/navigation/resolve_url\",\"webPageType\":\"WEB_PAGE_TYPE_CHANNEL\",\"rootVe\":3611,\"apiUrl\":\"/youtubei/v1/browse\"},\"resolveUrlCommandMetadata\":{\"isVanityUrl\":true}},\"browseEndpoint\":{\"browseId\":\"UCEOXxzW2vU0P-0THehuIIeg\",\"params\":\"EgC4AQDyBgQKAjIA\"}}}", "responseBody": "{\"responseContext\":{\"visitorData\":\"CgtLZXZHNVZaQlpqWSiEzvKbBg%3D%3D\",\"serviceTrackingParams\":[{\"service\":\"CSI\",\"params\":[{\"key\":\"c\",\"value\":\"WEB\"},{\"key\":\"cver\",\"value\":\"2.20221118.01.00\"},{\"key\":\"yt_li\",\"value\":\"0\"},{\"key\":\"ResolveUrl_rid\",\"value\":\"0xd2a82c6ae71596bb\"}]},{\"service\":\"GFEEDBACK\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"},{\"key\":\"e\",\"value\":\"1714249,23703445,23804281,23858057,23882503,23918597,23934970,23946420,23966208,23983296,23986033,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036947,24077241,24080738,24120820,24135310,24140247,24152442,24161116,24162919,24164186,24166867,24169501,24181174,24186126,24187043,24187377,24191629,24198082,24199724,24211178,24217229,24219713,24229161,24241378,24244167,24248092,24254502,24255163,24255543,24255545,24256985,24260783,24262346,24263796,24265425,24267564,24268142,24278596,24279196,24283093,24287327,24288045,24288912,24290971,24291857,24292955,24293803,24296190,24297394,24299357,24299747,24390675,24391543,24392401,24392526,24396645,24399011,24400178,24400185,24401557,24403793,24406314,24406605,24407200,24407665,24408438,24410013,24411127,24413364,24413720,24414162,24415865,24415866,24416238,24416290,24417274,24419033,24420149,24420756,24421162,24425061,39322504,39322574\"}]},{\"service\":\"GUIDED_HELP\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"}]},{\"service\":\"ECATCHER\",\"params\":[{\"key\":\"client.version\",\"value\":\"2.20221118\"},{\"key\":\"client.name\",\"value\":\"WEB\"},{\"key\":\"client.fexp\",\"value\":\"24291857,24416290,23983296,24219713,23804281,24415865,24140247,24406605,24408438,24255543,24414162,24391543,24400178,24400185,24255163,23998056,24162919,24036947,24187377,24293803,24004644,24007246,24120820,24077241,24407665,23946420,24420149,23966208,24199724,24260783,24263796,24297394,24299357,24417274,24161116,24267564,24187043,24403793,24299747,24217229,24415866,24262346,24265425,24419033,24296190,24241378,24186126,24164186,24248092,23882503,24191629,24416238,24229161,24135310,24392401,24406314,24287327,24413720,24211178,24407200,24034168,23934970,23858057,24002022,24288045,24169501,24410013,23703445,39322574,24288912,24421162,24244167,23986033,24401557,24399011,24292955,24283093,24001373,24152442,24181174,24420756,24278596,24411127,24390675,24290971,24268142,24413364,24254502,24002025,24198082,1714249,24279196,24166867,24255545,39322504,23918597,24425061,24392526,24396645,24080738,24256985\"}]}],\"mainAppWebResponseContext\":{\"loggedOut\":true},\"webResponseContextExtensionData\":{\"hasDecorated\":true}},\"endpoint\":{\"clickTrackingParams\":\"IhMIxbWK3MzB-wIVhNURCB0_Kg-_MghleHRlcm5hbA\u003d\u003d\",\"commandMetadata\":{\"webCommandMetadata\":{\"url\":\"/youtubei/v1/navigation/resolve_url\",\"webPageType\":\"WEB_PAGE_TYPE_CHANNEL\",\"rootVe\":3611,\"apiUrl\":\"/youtubei/v1/browse\"},\"resolveUrlCommandMetadata\":{\"isVanityUrl\":true}},\"browseEndpoint\":{\"browseId\":\"UCEOXxzW2vU0P-0THehuIIeg\",\"params\":\"EgC4AQDyBgQKAjIA\"}}}",
"latestUrl": "https://www.youtube.com/youtubei/v1/navigation/resolve_url?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8\u0026prettyPrint\u003dfalse" "latestUrl": "https://www.youtube.com/youtubei/v1/navigation/resolve_url?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8\u0026prettyPrint\u003dfalse"
} }
} }

View File

@ -41,10 +41,10 @@
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 23:12:52 GMT" "Tue, 22 Nov 2022 10:40:05 GMT"
], ],
"expires": [ "expires": [
"Wed, 02 Nov 2022 23:12:52 GMT" "Tue, 22 Nov 2022 10:40:05 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
@ -59,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003daFOfH_xu8k4; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dFnptoV5w1o0; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dThu, 06-Feb-2020 23:12:52 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:05 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+976; expires\u003dFri, 01-Nov-2024 23:12:52 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+048; expires\u003dThu, 21-Nov-2024 10:40:05 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -6,14 +6,17 @@
"Origin": [ "Origin": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Name": [ "Cookie": [
"1" "CONSENT\u003dPENDING+488"
], ],
"Referer": [ "Referer": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Version": [ "X-YouTube-Client-Version": [
"2.20221101.00.00" "2.20221118.01.00"
],
"X-YouTube-Client-Name": [
"1"
], ],
"Content-Type": [ "Content-Type": [
"application/json" "application/json"
@ -207,11 +210,11 @@
50, 50,
49, 49,
49, 49,
48,
49, 49,
56,
46, 46,
48, 48,
48, 49,
46, 46,
48, 48,
48, 48,
@ -334,20 +337,11 @@
"application/json; charset\u003dUTF-8" "application/json; charset\u003dUTF-8"
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 23:12:53 GMT" "Tue, 22 Nov 2022 10:40:05 GMT"
],
"expires": [
"Wed, 02 Nov 2022 23:12:53 GMT"
],
"p3p": [
"CP\u003d\"This is not a P3P policy! See g.co/p3phelp for more info.\""
], ],
"server": [ "server": [
"scaffolding on HTTPServer2" "scaffolding on HTTPServer2"
], ],
"set-cookie": [
"CONSENT\u003dPENDING+288; expires\u003dFri, 01-Nov-2024 23:12:53 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
],
"vary": [ "vary": [
"Origin", "Origin",
"X-Origin", "X-Origin",
@ -363,7 +357,7 @@
"0" "0"
] ]
}, },
"responseBody": "{\"responseContext\":{\"visitorData\":\"CgtieTdiV1lXeWFmTSj18oubBg%3D%3D\",\"serviceTrackingParams\":[{\"service\":\"CSI\",\"params\":[{\"key\":\"c\",\"value\":\"WEB\"},{\"key\":\"cver\",\"value\":\"2.20221101.00.00\"},{\"key\":\"yt_li\",\"value\":\"0\"},{\"key\":\"ResolveUrl_rid\",\"value\":\"0x01203331c856c87e\"}]},{\"service\":\"GFEEDBACK\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"},{\"key\":\"e\",\"value\":\"1714254,23804281,23882502,23918597,23934970,23940247,23946420,23966208,23983296,23986015,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036948,24077241,24080738,24120819,24135310,24140247,24152443,24161116,24162919,24164186,24166867,24169501,24181174,24185614,24187043,24187377,24191629,24199724,24211178,24218780,24219713,24224266,24224808,24229161,24241378,24248091,24254502,24255543,24255545,24256985,24260783,24262346,24262775,24263796,24265820,24267564,24267570,24268142,24273932,24278596,24279196,24279628,24280221,24283093,24283556,24286003,24286017,24286291,24287169,24287327,24287795,24288045,24288912,24290842,24290971,24291857,24292955,24297748,24298082,24299548,24299747,24390376,24390675,24390916,24391541,24392399,24393382,24394397,24396645,24396818,24398124,24398981,24400943,24401137,24401291,24401557,24406381,24406605,24406984,24407200,24408325,39322399,39322504,39322574\"}]},{\"service\":\"GUIDED_HELP\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"}]},{\"service\":\"ECATCHER\",\"params\":[{\"key\":\"client.version\",\"value\":\"2.20221101\"},{\"key\":\"client.name\",\"value\":\"WEB\"},{\"key\":\"client.fexp\",\"value\":\"24135310,24080738,24255543,24267570,23918597,24406605,24164186,24396818,24398124,23804281,24406984,24401137,24286291,23983296,24219713,23966208,24287327,24287169,24291857,24398981,24248091,24152443,24286003,24140247,24286017,24390675,24290842,24036948,24224808,24396645,1714254,24218780,39322399,24161116,24299747,23940247,24401291,24400943,24278596,24256985,24001373,23946420,24268142,24298082,24290971,24077241,24292955,24408325,24229161,24169501,24401557,24391541,24241378,24390916,24297748,24224266,24002022,24280221,23934970,24407200,24034168,24262775,39322574,24181174,23882502,24211178,24120819,24265820,24288045,39322504,24254502,24288912,24166867,24255545,24393382,24279628,24394397,24002025,24279196,24273932,24191629,24283093,24263796,24187043,24406381,24390376,24267564,24260783,24287795,24392399,24004644,24007246,23986015,24299548,24162919,24187377,24283556,24262346,23998056,24185614,24199724\"}]}],\"mainAppWebResponseContext\":{\"loggedOut\":true},\"webResponseContextExtensionData\":{\"hasDecorated\":true}},\"endpoint\":{\"clickTrackingParams\":\"IhMIz4TI18-Q-wIV5YE4Ch01jgrjMghleHRlcm5hbA\u003d\u003d\",\"commandMetadata\":{\"webCommandMetadata\":{\"url\":\"/youtubei/v1/navigation/resolve_url\",\"webPageType\":\"WEB_PAGE_TYPE_CHANNEL\",\"rootVe\":3611,\"apiUrl\":\"/youtubei/v1/browse\"},\"resolveUrlCommandMetadata\":{\"isVanityUrl\":true}},\"browseEndpoint\":{\"browseId\":\"UCYJ61XIK64sp6ZFFS8sctxw\",\"params\":\"EgC4AQDyBgQKAjIA\"}}}", "responseBody": "{\"responseContext\":{\"visitorData\":\"CgtLd0xCZnpZRnVsSSiFzvKbBg%3D%3D\",\"serviceTrackingParams\":[{\"service\":\"CSI\",\"params\":[{\"key\":\"c\",\"value\":\"WEB\"},{\"key\":\"cver\",\"value\":\"2.20221118.01.00\"},{\"key\":\"yt_li\",\"value\":\"0\"},{\"key\":\"ResolveUrl_rid\",\"value\":\"0x894f99cd60218c47\"}]},{\"service\":\"GFEEDBACK\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"},{\"key\":\"e\",\"value\":\"1714254,23804281,23882502,23918597,23934970,23946420,23966208,23983296,23986024,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036948,24077241,24080738,24120819,24135310,24140247,24152443,24161116,24162920,24164186,24166867,24169501,24181174,24187043,24187377,24191629,24199724,24211178,24217229,24219713,24229161,24241378,24246502,24248091,24254502,24255165,24255543,24255545,24256987,24260102,24260783,24262346,24263796,24267564,24268142,24278596,24279196,24280761,24283093,24287327,24288418,24288912,24290971,24291857,24292955,24293803,24299747,24390675,24392059,24396645,24401013,24401557,24406314,24406605,24406663,24407200,24407665,24411765,24412844,24414162,24415029,24415866,24416650,24417236,24417274,24420358,24420727,24420756,24421162,24424972,39322504,39322574\"}]},{\"service\":\"GUIDED_HELP\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"}]},{\"service\":\"ECATCHER\",\"params\":[{\"key\":\"client.version\",\"value\":\"2.20221118\"},{\"key\":\"client.name\",\"value\":\"WEB\"},{\"key\":\"client.fexp\",\"value\":\"24255165,24290971,24169501,24001373,23934970,24181174,24268142,24420756,24288418,24278596,24217229,24292955,24401557,39322504,24406663,24034168,24191629,24407200,24279196,24002022,24412844,24246502,23882502,24211178,24120819,24420727,24254502,24401013,39322574,24390675,24255545,24416650,24036948,24424972,24288912,24392059,24002025,24199724,24396645,24421162,24166867,24411765,24080738,24283093,24162920,24420358,24417236,23804281,24407665,23966208,24417274,24267564,24263796,23998056,24187377,24293803,24077241,24280761,24415866,24406605,23946420,24255543,24004644,24007246,23918597,24291857,24219713,24135310,24248091,24287327,24140247,24161116,24406314,23983296,24414162,24299747,1714254,24262346,24260102,24260783,24152443,24229161,23986024,24415029,24256987,24241378,24187043,24164186\"}]}],\"mainAppWebResponseContext\":{\"loggedOut\":true},\"webResponseContextExtensionData\":{\"hasDecorated\":true}},\"endpoint\":{\"clickTrackingParams\":\"IhMI2__C3MzB-wIVIt4RCB11Wgi6MghleHRlcm5hbA\u003d\u003d\",\"commandMetadata\":{\"webCommandMetadata\":{\"url\":\"/youtubei/v1/navigation/resolve_url\",\"webPageType\":\"WEB_PAGE_TYPE_CHANNEL\",\"rootVe\":3611,\"apiUrl\":\"/youtubei/v1/browse\"},\"resolveUrlCommandMetadata\":{\"isVanityUrl\":true}},\"browseEndpoint\":{\"browseId\":\"UCYJ61XIK64sp6ZFFS8sctxw\",\"params\":\"EgC4AQDyBgQKAjIA\"}}}",
"latestUrl": "https://www.youtube.com/youtubei/v1/navigation/resolve_url?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8\u0026prettyPrint\u003dfalse" "latestUrl": "https://www.youtube.com/youtubei/v1/navigation/resolve_url?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8\u0026prettyPrint\u003dfalse"
} }
} }

View File

@ -41,10 +41,10 @@
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 17:41:03 GMT" "Tue, 22 Nov 2022 10:40:07 GMT"
], ],
"expires": [ "expires": [
"Wed, 02 Nov 2022 17:41:03 GMT" "Tue, 22 Nov 2022 10:40:07 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
@ -59,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dAVE5NuANOas; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dNQGuNvp4W3E; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dThu, 06-Feb-2020 17:41:03 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:07 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+233; expires\u003dFri, 01-Nov-2024 17:41:03 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+566; expires\u003dThu, 21-Nov-2024 10:40:07 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -41,10 +41,10 @@
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 18:09:28 GMT" "Tue, 22 Nov 2022 10:40:10 GMT"
], ],
"expires": [ "expires": [
"Wed, 02 Nov 2022 18:09:28 GMT" "Tue, 22 Nov 2022 10:40:10 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
@ -59,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dWzKJMUonlJc; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dzITFJjB3uZU; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dThu, 06-Feb-2020 18:09:28 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:10 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+781; expires\u003dFri, 01-Nov-2024 18:09:28 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+083; expires\u003dThu, 21-Nov-2024 10:40:10 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -6,14 +6,17 @@
"Origin": [ "Origin": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Name": [ "Cookie": [
"1" "CONSENT\u003dPENDING+488"
], ],
"Referer": [ "Referer": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Version": [ "X-YouTube-Client-Version": [
"2.20221101.00.00" "2.20221118.01.00"
],
"X-YouTube-Client-Name": [
"1"
], ],
"Content-Type": [ "Content-Type": [
"application/json" "application/json"
@ -207,11 +210,11 @@
50, 50,
49, 49,
49, 49,
48,
49, 49,
56,
46, 46,
48, 48,
48, 49,
46, 46,
48, 48,
48, 48,
@ -339,20 +342,11 @@
"application/json; charset\u003dUTF-8" "application/json; charset\u003dUTF-8"
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 18:09:29 GMT" "Tue, 22 Nov 2022 10:40:10 GMT"
],
"expires": [
"Wed, 02 Nov 2022 18:09:29 GMT"
],
"p3p": [
"CP\u003d\"This is not a P3P policy! See g.co/p3phelp for more info.\""
], ],
"server": [ "server": [
"scaffolding on HTTPServer2" "scaffolding on HTTPServer2"
], ],
"set-cookie": [
"CONSENT\u003dPENDING+851; expires\u003dFri, 01-Nov-2024 18:09:29 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
],
"vary": [ "vary": [
"Origin", "Origin",
"X-Origin", "X-Origin",
@ -368,7 +362,7 @@
"0" "0"
] ]
}, },
"responseBody": "{\"responseContext\":{\"visitorData\":\"CgtzNzVnMUhsTVZRdyjZ5IqbBg%3D%3D\",\"serviceTrackingParams\":[{\"service\":\"CSI\",\"params\":[{\"key\":\"c\",\"value\":\"WEB\"},{\"key\":\"cver\",\"value\":\"2.20221101.00.00\"},{\"key\":\"yt_li\",\"value\":\"0\"},{\"key\":\"ResolveUrl_rid\",\"value\":\"0x837d7832e173abb2\"}]},{\"service\":\"GFEEDBACK\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"},{\"key\":\"e\",\"value\":\"1714243,23804281,23882502,23918597,23934970,23946420,23966208,23983296,23986016,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036948,24077241,24080738,24120820,24135310,24140247,24152442,24161116,24162920,24164186,24166867,24169501,24181174,24185614,24186126,24187043,24187377,24191629,24199724,24211178,24218780,24219713,24229161,24241378,24248091,24254502,24255165,24255543,24255545,24260783,24262346,24263796,24265820,24266635,24267564,24267570,24268142,24278596,24279196,24279628,24283093,24283556,24287327,24287795,24288912,24290971,24291857,24292955,24299747,24390674,24393382,24396645,24396818,24398124,24401557,24406381,24406604,24406983,24407200,39322399,39322504,39322574\"}]},{\"service\":\"GUIDED_HELP\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"}]},{\"service\":\"ECATCHER\",\"params\":[{\"key\":\"client.version\",\"value\":\"2.20221101\"},{\"key\":\"client.name\",\"value\":\"WEB\"},{\"key\":\"client.fexp\",\"value\":\"24229161,24191629,24140247,24287327,24291857,24186126,23983296,24120820,24185614,24262346,24299747,24406381,24241378,24267564,24187043,24164186,24263796,24218780,24260783,24169501,24181174,24152442,24001373,24268142,24290971,24292955,1714243,24390674,24278596,24255165,24279196,39322504,24401557,24211178,23986016,23934970,24034168,24393382,23882502,24161116,39322399,24279628,24002022,24407200,24080738,24406983,24219713,24266635,24254502,24036948,24255545,39322574,24265820,24396645,24283093,24002025,24199724,24288912,24406604,24287795,24162920,24166867,24267570,24398124,23966208,24283556,24248091,23804281,24004644,24077241,24187377,24135310,24255543,24396818,24007246,23998056,23946420,23918597\"}]}],\"mainAppWebResponseContext\":{\"loggedOut\":true},\"webResponseContextExtensionData\":{\"hasDecorated\":true}},\"endpoint\":{\"clickTrackingParams\":\"IhMI3omG74uQ-wIVIt4RCB31GgQvMghleHRlcm5hbA\u003d\u003d\",\"commandMetadata\":{\"webCommandMetadata\":{\"url\":\"/youtubei/v1/navigation/resolve_url\",\"webPageType\":\"WEB_PAGE_TYPE_CHANNEL\",\"rootVe\":3611,\"apiUrl\":\"/youtubei/v1/browse\"},\"resolveUrlCommandMetadata\":{\"isVanityUrl\":true}},\"browseEndpoint\":{\"browseId\":\"UCeY0bbntWzzVIaj2z3QigXg\",\"params\":\"EgC4AQDyBgQKAjIA\"}}}", "responseBody": "{\"responseContext\":{\"visitorData\":\"CgtlQ1NVamhzSklwdyiKzvKbBg%3D%3D\",\"serviceTrackingParams\":[{\"service\":\"CSI\",\"params\":[{\"key\":\"c\",\"value\":\"WEB\"},{\"key\":\"cver\",\"value\":\"2.20221118.01.00\"},{\"key\":\"yt_li\",\"value\":\"0\"},{\"key\":\"ResolveUrl_rid\",\"value\":\"0xb1565d8a16b10176\"}]},{\"service\":\"GFEEDBACK\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"},{\"key\":\"e\",\"value\":\"1714248,23795882,23804281,23882685,23918597,23934970,23946420,23966208,23983296,23986023,23998056,24001373,24002022,24002025,24004644,24007246,24034168,24036948,24077241,24080738,24108447,24120819,24135310,24140247,24152443,24161116,24162920,24164186,24166867,24169501,24181174,24187043,24187377,24191629,24199724,24211178,24217229,24219713,24229161,24241378,24248092,24248955,24254502,24255163,24255543,24255545,24256986,24260783,24262346,24263796,24265426,24267564,24268142,24278596,24279196,24281671,24283093,24287327,24287604,24288043,24288912,24290971,24291857,24292955,24293803,24298326,24299357,24299747,24390675,24391539,24392405,24396645,24398996,24399916,24401557,24403045,24404214,24406313,24406367,24406605,24407200,24407454,24407665,24409253,24412682,24413144,24414162,24415866,24416290,24417274,24417486,24418788,24420358,24420364,24420756,24421162,24424279,24424365,39322504,39322574\"}]},{\"service\":\"GUIDED_HELP\",\"params\":[{\"key\":\"logged_in\",\"value\":\"0\"}]},{\"service\":\"ECATCHER\",\"params\":[{\"key\":\"client.version\",\"value\":\"2.20221118\"},{\"key\":\"client.name\",\"value\":\"WEB\"},{\"key\":\"client.fexp\",\"value\":\"24191629,24417274,24267564,24161116,24404214,23998056,24217229,24415866,24004644,23882685,24413144,24298326,24409253,24293803,24007246,23795882,24248092,24403045,24262346,24135310,1714248,24211178,24241378,24291857,24399916,24406367,24420364,23934970,24287327,24187043,24260783,24164186,24398996,24263796,24152443,24424279,23966208,24080738,24140247,24416290,24407665,24255163,24288043,24406313,23804281,24287604,24187377,23983296,24255543,24414162,24299747,24199724,23946420,24406605,24256986,24248955,24299357,24290971,24001373,24390675,24420756,24254502,24036948,24077241,24255545,24268142,24278596,24292955,39322504,23918597,24417486,24391539,24407454,23986023,24219713,24166867,24162920,24396645,24279196,24002022,24424365,24229161,24108447,24169501,24265426,24392405,24181174,39322574,24120819,24418788,24002025,24283093,24412682,24401557,24288912,24421162,24034168,24281671,24407200,24420358\"}]}],\"mainAppWebResponseContext\":{\"loggedOut\":true},\"webResponseContextExtensionData\":{\"hasDecorated\":true}},\"endpoint\":{\"clickTrackingParams\":\"IhMIktn23szB-wIVdNMRCB1gNAQsMghleHRlcm5hbA\u003d\u003d\",\"commandMetadata\":{\"webCommandMetadata\":{\"url\":\"/youtubei/v1/navigation/resolve_url\",\"webPageType\":\"WEB_PAGE_TYPE_CHANNEL\",\"rootVe\":3611,\"apiUrl\":\"/youtubei/v1/browse\"},\"resolveUrlCommandMetadata\":{\"isVanityUrl\":true}},\"browseEndpoint\":{\"browseId\":\"UCeY0bbntWzzVIaj2z3QigXg\",\"params\":\"EgC4AQDyBgQKAjIA\"}}}",
"latestUrl": "https://www.youtube.com/youtubei/v1/navigation/resolve_url?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8\u0026prettyPrint\u003dfalse" "latestUrl": "https://www.youtube.com/youtubei/v1/navigation/resolve_url?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8\u0026prettyPrint\u003dfalse"
} }
} }

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:22 GMT" "Tue, 22 Nov 2022 10:40:08 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:22 GMT" "Tue, 22 Nov 2022 10:40:08 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dZzVxGpjPidM; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dSqETKRNnftE; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:22 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:08 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+044; expires\u003dSun, 11-Aug-2024 17:16:22 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+068; expires\u003dThu, 21-Nov-2024 10:40:08 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -6,14 +6,17 @@
"Origin": [ "Origin": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Name": [ "Cookie": [
"1" "CONSENT\u003dPENDING+578"
], ],
"Referer": [ "Referer": [
"https://www.youtube.com" "https://www.youtube.com"
], ],
"X-YouTube-Client-Version": [ "X-YouTube-Client-Version": [
"2.20220809.02.00" "2.20221118.01.00"
],
"X-YouTube-Client-Name": [
"1"
], ],
"Content-Type": [ "Content-Type": [
"application/json" "application/json"
@ -231,13 +234,13 @@
48, 48,
50, 50,
50, 50,
48, 49,
49,
49,
56, 56,
48,
57,
46, 46,
48, 48,
50, 49,
46, 46,
48, 48,
48, 48,
@ -346,7 +349,7 @@
"application/json; charset\u003dUTF-8" "application/json; charset\u003dUTF-8"
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:23 GMT" "Tue, 22 Nov 2022 10:40:08 GMT"
], ],
"server": [ "server": [
"scaffolding on HTTPServer2" "scaffolding on HTTPServer2"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:23 GMT" "Tue, 22 Nov 2022 10:40:08 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:23 GMT" "Tue, 22 Nov 2022 10:40:08 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dac29gHtTp4I; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dLUzklSvOALI; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:23 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:08 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+304; expires\u003dSun, 11-Aug-2024 17:16:23 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+404; expires\u003dThu, 21-Nov-2024 10:40:08 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -41,10 +41,10 @@
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Wed, 02 Nov 2022 17:41:44 GMT" "Tue, 22 Nov 2022 10:40:09 GMT"
], ],
"expires": [ "expires": [
"Wed, 02 Nov 2022 17:41:44 GMT" "Tue, 22 Nov 2022 10:40:09 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
@ -59,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003d0xEsk8goB80; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003diWN_EQSBC0c; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dThu, 06-Feb-2020 17:41:44 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:09 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+253; expires\u003dFri, 01-Nov-2024 17:41:44 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+389; expires\u003dThu, 21-Nov-2024 10:40:09 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:31 GMT" "Tue, 22 Nov 2022 10:40:13 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:31 GMT" "Tue, 22 Nov 2022 10:40:13 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dr-U6j9iTD8I; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dX2z4aFJWv_c; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:31 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:13 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+983; expires\u003dSun, 11-Aug-2024 17:16:31 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+579; expires\u003dThu, 21-Nov-2024 10:40:13 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:32 GMT" "Tue, 22 Nov 2022 10:40:14 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:32 GMT" "Tue, 22 Nov 2022 10:40:14 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003debW8kYy6pec; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dnIERwTWAhck; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:32 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:14 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+957; expires\u003dSun, 11-Aug-2024 17:16:32 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+120; expires\u003dThu, 21-Nov-2024 10:40:14 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:35 GMT" "Tue, 22 Nov 2022 10:40:15 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:35 GMT" "Tue, 22 Nov 2022 10:40:15 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003ddwizTRZX7Es; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003djD4kj1KxjUQ; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:35 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:15 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+132; expires\u003dSun, 11-Aug-2024 17:16:35 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+274; expires\u003dThu, 21-Nov-2024 10:40:15 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:36 GMT" "Tue, 22 Nov 2022 10:40:17 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:36 GMT" "Tue, 22 Nov 2022 10:40:17 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dz1oG5f8tklg; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dulpvyFBP5lQ; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:36 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:17 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+811; expires\u003dSun, 11-Aug-2024 17:16:36 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+178; expires\u003dThu, 21-Nov-2024 10:40:17 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:33 GMT" "Tue, 22 Nov 2022 10:40:18 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:33 GMT" "Tue, 22 Nov 2022 10:40:18 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dTdlUMMVRby8; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dqUcA0_a0hUo; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:33 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:18 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+892; expires\u003dSun, 11-Aug-2024 17:16:33 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+930; expires\u003dThu, 21-Nov-2024 10:40:18 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:38 GMT" "Tue, 22 Nov 2022 10:40:20 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:38 GMT" "Tue, 22 Nov 2022 10:40:20 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dYZZX-K7shdw; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003ddIhq5C9znKU; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:38 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:20 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+734; expires\u003dSun, 11-Aug-2024 17:16:38 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+600; expires\u003dThu, 21-Nov-2024 10:40:19 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:16:29 GMT" "Tue, 22 Nov 2022 10:40:21 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:16:29 GMT" "Tue, 22 Nov 2022 10:40:21 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dzi4tfTaJwwU; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dSIDatHvWybs; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:16:29 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:21 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+478; expires\u003dSun, 11-Aug-2024 17:16:29 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+666; expires\u003dThu, 21-Nov-2024 10:40:21 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -26,7 +26,7 @@
"text/html; charset\u003dUTF-8" "text/html; charset\u003dUTF-8"
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:15:40 GMT" "Tue, 22 Nov 2022 10:40:26 GMT"
], ],
"server": [ "server": [
"YouTube RSS Feeds server" "YouTube RSS Feeds server"

View File

@ -37,23 +37,20 @@
"content-type": [ "content-type": [
"text/javascript; charset\u003dutf-8" "text/javascript; charset\u003dutf-8"
], ],
"critical-ch": [
"Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version"
],
"cross-origin-opener-policy-report-only": [ "cross-origin-opener-policy-report-only": [
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Fri, 12 Aug 2022 17:15:40 GMT" "Tue, 22 Nov 2022 10:40:26 GMT"
], ],
"expires": [ "expires": [
"Fri, 12 Aug 2022 17:15:40 GMT" "Tue, 22 Nov 2022 10:40:26 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -62,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dkoiv-HhOPrg; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003daSSq4mC6HTI; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dSat, 16-Nov-2019 17:15:40 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:26 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+636; expires\u003dSun, 11-Aug-2024 17:15:40 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+953; expires\u003dThu, 21-Nov-2024 10:40:26 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -41,16 +41,16 @@
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Sun, 21 Aug 2022 16:38:46 GMT" "Tue, 22 Nov 2022 10:40:27 GMT"
], ],
"expires": [ "expires": [
"Sun, 21 Aug 2022 16:38:46 GMT" "Tue, 22 Nov 2022 10:40:27 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -59,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dt2u6Ud1gkeE; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dJP7aUOJipH8; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dMon, 25-Nov-2019 16:38:46 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:27 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+112; expires\u003dTue, 20-Aug-2024 16:38:46 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+499; expires\u003dThu, 21-Nov-2024 10:40:27 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

View File

@ -41,16 +41,16 @@
"same-origin; report-to\u003d\"youtube_main\"" "same-origin; report-to\u003d\"youtube_main\""
], ],
"date": [ "date": [
"Sun, 21 Aug 2022 16:38:47 GMT" "Tue, 22 Nov 2022 10:40:28 GMT"
], ],
"expires": [ "expires": [
"Sun, 21 Aug 2022 16:38:47 GMT" "Tue, 22 Nov 2022 10:40:28 GMT"
], ],
"p3p": [ "p3p": [
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\"" "CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
], ],
"permissions-policy": [ "permissions-policy": [
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*" "ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
], ],
"report-to": [ "report-to": [
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}" "{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
@ -59,9 +59,9 @@
"ESF" "ESF"
], ],
"set-cookie": [ "set-cookie": [
"YSC\u003dLGlvlQyOQUM; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "YSC\u003dg3jDSwSSHF0; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dMon, 25-Nov-2019 16:38:47 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone", "VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dWed, 26-Feb-2020 10:40:28 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
"CONSENT\u003dPENDING+765; expires\u003dTue, 20-Aug-2024 16:38:47 GMT; path\u003d/; domain\u003d.youtube.com; Secure" "CONSENT\u003dPENDING+674; expires\u003dThu, 21-Nov-2024 10:40:28 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
], ],
"strict-transport-security": [ "strict-transport-security": [
"max-age\u003d31536000" "max-age\u003d31536000"

Some files were not shown because too many files have changed in this diff Show More