diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Downloader.java b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Downloader.java index 8e3b137de..aa7987156 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Downloader.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Downloader.java @@ -7,6 +7,8 @@ import org.schabi.newpipe.extractor.localization.Localization; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; import java.util.List; 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 * @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 { return get(url, null, localization); } @@ -70,7 +72,7 @@ public abstract class Downloader { */ public Response get(final String url, @Nullable final Map> headers, - @Nullable final Localization localization) + final Localization localization) throws IOException, ReCaptchaException { return execute(Request.newBuilder() .get(url) @@ -136,7 +138,7 @@ public abstract class Downloader { public Response post(final String url, @Nullable final Map> headers, @Nullable final byte[] dataToSend, - @Nullable final Localization localization) + final Localization localization) throws IOException, ReCaptchaException { return execute(Request.newBuilder() .post(url, dataToSend) @@ -145,6 +147,95 @@ public abstract class Downloader { .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 should 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> headers, + @Nullable final byte[] dataToSend, + final Localization localization, + final String contentType) + throws IOException, ReCaptchaException { + final Map> 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 should 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> 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 should 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> 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 should 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> headers, + @Nullable final byte[] dataToSend) + throws IOException, ReCaptchaException { + return postWithContentTypeJson(url, headers, dataToSend, + NewPipe.getPreferredLocalization()); + } + /** * Do a request using the specified {@link Request} object. *