33import  org .schabi .newpipe .extractor .NewPipe ;
44import  org .schabi .newpipe .extractor .exceptions .ReCaptchaException ;
55import  org .schabi .newpipe .extractor .localization .Localization ;
6+ import  org .schabi .newpipe .extractor .utils .Utils ;
67
78import  javax .annotation .Nonnull ;
89import  javax .annotation .Nullable ;
@@ -25,10 +26,10 @@ public abstract class Downloader {
2526     * localization. It should only be used when the resource that will be fetched won't be affected 
2627     * by the localization. 
2728     * 
28-      * @param url the URL that is pointing to the wanted resource 
29+      * @param url the URL that is pointing to the wanted resource (must start with HTTPS)  
2930     * @return the result of the GET request 
3031     */ 
31-     public  Response  get (final  String  url ) throws  IOException , ReCaptchaException  {
32+     public  final   Response  get (final  String  url ) throws  IOException , ReCaptchaException  {
3233        return  get (url , null , NewPipe .getPreferredLocalization ());
3334    }
3435
@@ -37,24 +38,24 @@ public Response get(final String url) throws IOException, ReCaptchaException {
3738     * <br> 
3839     * It will set the {@code Accept-Language} header to the language of the localization parameter. 
3940     * 
40-      * @param url          the URL that is pointing to the wanted resource 
41+      * @param url          the URL that is pointing to the wanted resource (must start with HTTPS)  
4142     * @param localization the source of the value of the {@code Accept-Language} header 
4243     * @return the result of the GET request 
4344     */ 
44-     public  Response  get (final  String  url , final  Localization  localization )
45+     public  final   Response  get (final  String  url , final  Localization  localization )
4546            throws  IOException , ReCaptchaException  {
4647        return  get (url , null , localization );
4748    }
4849
4950    /** 
5051     * Do a GET request with the specified headers. 
5152     * 
52-      * @param url     the URL that is pointing to the wanted resource 
53+      * @param url     the URL that is pointing to the wanted resource (must start with HTTPS)  
5354     * @param headers a list of headers that will be used in the request. 
5455     *                Any default headers <b>should</b> be overridden by these. 
5556     * @return the result of the GET request 
5657     */ 
57-     public  Response  get (final  String  url , @ Nullable  final  Map <String , List <String >> headers )
58+     public  final   Response  get (final  String  url , @ Nullable  final  Map <String , List <String >> headers )
5859            throws  IOException , ReCaptchaException  {
5960        return  get (url , headers , NewPipe .getPreferredLocalization ());
6061    }
@@ -64,44 +65,42 @@ public Response get(final String url, @Nullable final Map<String, List<String>>
6465     * <br> 
6566     * It will set the {@code Accept-Language} header to the language of the localization parameter. 
6667     * 
67-      * @param url          the URL that is pointing to the wanted resource 
68+      * @param url          the URL that is pointing to the wanted resource (must start with HTTPS)  
6869     * @param headers      a list of headers that will be used in the request. 
6970     *                     Any default headers <b>should</b> be overridden by these. 
7071     * @param localization the source of the value of the {@code Accept-Language} header 
7172     * @return the result of the GET request 
7273     */ 
73-     public  Response  get (final  String  url ,
74+     public  final   Response  get (final  String  url ,
7475                        @ Nullable  final  Map <String , List <String >> headers ,
7576                        final  Localization  localization )
7677            throws  IOException , ReCaptchaException  {
77-         return  execute (Request .newBuilder ()
78+         return  executeIfHttps (Request .newBuilder ()
7879                .get (url )
79-                 .headers (headers )
80-                 .localization (localization )
8180                .build ());
8281    }
8382
8483    /** 
8584     * Do a HEAD request. 
8685     * 
87-      * @param url the URL that is pointing to the wanted resource 
86+      * @param url the URL that is pointing to the wanted resource (must start with HTTPS)  
8887     * @return the result of the HEAD request 
8988     */ 
90-     public  Response  head (final  String  url ) throws  IOException , ReCaptchaException  {
89+     public  final   Response  head (final  String  url ) throws  IOException , ReCaptchaException  {
9190        return  head (url , null );
9291    }
9392
9493    /** 
9594     * Do a HEAD request with the specified headers. 
9695     * 
97-      * @param url     the URL that is pointing to the wanted resource 
96+      * @param url     the URL that is pointing to the wanted resource (must start with HTTPS)  
9897     * @param headers a list of headers that will be used in the request. 
9998     *                Any default headers <b>should</b> be overridden by these. 
10099     * @return the result of the HEAD request 
101100     */ 
102-     public  Response  head (final  String  url , @ Nullable  final  Map <String , List <String >> headers )
101+     public  final   Response  head (final  String  url , @ Nullable  final  Map <String , List <String >> headers )
103102            throws  IOException , ReCaptchaException  {
104-         return  execute (Request .newBuilder ()
103+         return  executeIfHttps (Request .newBuilder ()
105104                .head (url )
106105                .headers (headers )
107106                .build ());
@@ -110,13 +109,13 @@ public Response head(final String url, @Nullable final Map<String, List<String>>
110109    /** 
111110     * Do a POST request with the specified headers, sending the data array. 
112111     * 
113-      * @param url        the URL that is pointing to the wanted resource 
112+      * @param url        the URL that is pointing to the wanted resource (must start with HTTPS)  
114113     * @param headers    a list of headers that will be used in the request. 
115114     *                   Any default headers <b>should</b> be overridden by these. 
116115     * @param dataToSend byte array that will be sent when doing the request. 
117116     * @return the result of the POST request 
118117     */ 
119-     public  Response  post (final  String  url ,
118+     public  final   Response  post (final  String  url ,
120119                         @ Nullable  final  Map <String , List <String >> headers ,
121120                         @ Nullable  final  byte [] dataToSend )
122121            throws  IOException , ReCaptchaException  {
@@ -128,19 +127,19 @@ public Response post(final String url,
128127     * <br> 
129128     * It will set the {@code Accept-Language} header to the language of the localization parameter. 
130129     * 
131-      * @param url          the URL that is pointing to the wanted resource 
130+      * @param url          the URL that is pointing to the wanted resource (must start with HTTPS)  
132131     * @param headers      a list of headers that will be used in the request. 
133132     *                     Any default headers <b>should</b> be overridden by these. 
134133     * @param dataToSend   byte array that will be sent when doing the request. 
135134     * @param localization the source of the value of the {@code Accept-Language} header 
136135     * @return the result of the POST request 
137136     */ 
138-     public  Response  post (final  String  url ,
137+     public  final   Response  post (final  String  url ,
139138                         @ Nullable  final  Map <String , List <String >> headers ,
140139                         @ Nullable  final  byte [] dataToSend ,
141140                         final  Localization  localization )
142141            throws  IOException , ReCaptchaException  {
143-         return  execute (Request .newBuilder ()
142+         return  executeIfHttps (Request .newBuilder ()
144143                .post (url , dataToSend )
145144                .headers (headers )
146145                .localization (localization )
@@ -151,7 +150,7 @@ public Response post(final String url,
151150     * Convenient method to send a POST request using the specified value of the 
152151     * {@code Content-Type} header with a given {@link Localization}. 
153152     * 
154-      * @param url          the URL that is pointing to the wanted resource 
153+      * @param url          the URL that is pointing to the wanted resource (must start with HTTPS)  
155154     * @param headers      a list of headers that will be used in the request. 
156155     *                     Any default headers <b>should</b> be overridden by these. 
157156     * @param dataToSend   byte array that will be sent when doing the request. 
@@ -161,7 +160,7 @@ public Response post(final String url,
161160     * @return the result of the POST request 
162161     * @see #post(String, Map, byte[], Localization) 
163162     */ 
164-     public  Response  postWithContentType (final  String  url ,
163+     public  final   Response  postWithContentType (final  String  url ,
165164                                        @ Nullable  final  Map <String , List <String >> headers ,
166165                                        @ Nullable  final  byte [] dataToSend ,
167166                                        final  Localization  localization ,
@@ -179,7 +178,7 @@ public Response postWithContentType(final String url,
179178     * Convenient method to send a POST request using the specified value of the 
180179     * {@code Content-Type} header. 
181180     * 
182-      * @param url         the URL that is pointing to the wanted resource 
181+      * @param url         the URL that is pointing to the wanted resource (must start with HTTPS)  
183182     * @param headers     a list of headers that will be used in the request. 
184183     *                    Any default headers <b>should</b> be overridden by these. 
185184     * @param dataToSend  byte array that will be sent when doing the request. 
@@ -188,7 +187,7 @@ public Response postWithContentType(final String url,
188187     * @return the result of the POST request 
189188     * @see #post(String, Map, byte[], Localization) 
190189     */ 
191-     public  Response  postWithContentType (final  String  url ,
190+     public  final   Response  postWithContentType (final  String  url ,
192191                                        @ Nullable  final  Map <String , List <String >> headers ,
193192                                        @ Nullable  final  byte [] dataToSend ,
194193                                        final  String  contentType )
@@ -201,15 +200,15 @@ public Response postWithContentType(final String url,
201200     * Convenient method to send a POST request the JSON mime type as the value of the 
202201     * {@code Content-Type} header with a given {@link Localization}. 
203202     * 
204-      * @param url          the URL that is pointing to the wanted resource 
203+      * @param url          the URL that is pointing to the wanted resource (must start with HTTPS)  
205204     * @param headers      a list of headers that will be used in the request. 
206205     *                     Any default headers <b>should</b> be overridden by these. 
207206     * @param dataToSend   byte array that will be sent when doing the request. 
208207     * @param localization the source of the value of the {@code Accept-Language} header 
209208     * @return the result of the POST request 
210209     * @see #post(String, Map, byte[], Localization) 
211210     */ 
212-     public  Response  postWithContentTypeJson (final  String  url ,
211+     public  final   Response  postWithContentTypeJson (final  String  url ,
213212                                            @ Nullable  final  Map <String , List <String >> headers ,
214213                                            @ Nullable  final  byte [] dataToSend ,
215214                                            final  Localization  localization )
@@ -221,26 +220,39 @@ public Response postWithContentTypeJson(final String url,
221220     * Convenient method to send a POST request the JSON mime type as the value of the 
222221     * {@code Content-Type} header. 
223222     * 
224-      * @param url         the URL that is pointing to the wanted resource 
223+      * @param url         the URL that is pointing to the wanted resource (must start with HTTPS)  
225224     * @param headers     a list of headers that will be used in the request. 
226225     *                    Any default headers <b>should</b> be overridden by these. 
227226     * @param dataToSend  byte array that will be sent when doing the request. 
228227     * @return the result of the POST request 
229228     * @see #post(String, Map, byte[], Localization) 
230229     */ 
231-     public  Response  postWithContentTypeJson (final  String  url ,
230+     public  final   Response  postWithContentTypeJson (final  String  url ,
232231                                            @ Nullable  final  Map <String , List <String >> headers ,
233232                                            @ Nullable  final  byte [] dataToSend )
234233            throws  IOException , ReCaptchaException  {
235234        return  postWithContentTypeJson (url , headers , dataToSend ,
236235                NewPipe .getPreferredLocalization ());
237236    }
238237
238+     public  final  Response  executeIfHttps (final  @ Nonnull  Request  request )
239+             throws  IOException , ReCaptchaException  {
240+ 
241+         if  (!request .url ().equals (Utils .replaceHttpWithHttps (request .url ()))) {
242+             throw  new  IOException (
243+                     "All queries must be made using HTTPS. Extractors must guarantee " 
244+                             + "that HTTPS links are provided." 
245+             );
246+         } else  {
247+             return  execute (request );
248+         }
249+     }
250+ 
239251    /** 
240252     * Do a request using the specified {@link Request} object. 
241253     * 
242254     * @return the result of the request 
243255     */ 
244-     public  abstract  Response  execute (@ Nonnull  Request  request )
256+     protected  abstract  Response  execute (@ Nonnull  Request  request )
245257            throws  IOException , ReCaptchaException ;
246258}
0 commit comments