2020 */
2121public final class HttpRequest {
2222
23- /**
24- * Permite a depuração dos detalhes da requisição sendo efetuada
25- */
26- public static boolean DEBUG = false ;
27-
2823 public static final String HEADER_HOST = "Host" ;
29-
3024 public static final String HEADER_COOKIE = "Cookie" ;
31-
3225 public static final String HEADER_ACCEPT = "Accept" ;
33-
3426 public static final String HEADER_ORIGIN = "Origin" ;
35-
3627 public static final String HEADER_USER_AGENT = "User-Agent" ;
37-
3828 public static final String HEADER_SET_COOKIE = "Set-Cookie" ;
39-
4029 public static final String HEADER_CONTENT_TYPE = "Content-Type" ;
41-
4230 public static final String HEADER_AUTHORIZATION = "Authorization" ;
43-
4431 public static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding" ;
45-
4632 public static final String HEADER_CONTENT_LANGUAGE = "Content-Language" ;
47-
4833 /**
4934 * Salva a compilação dos regex usados para fazer alteração no PATH de endpoints
5035 */
5136 private static final Map <String , Pattern > PATH_REGEX_CACHED = new ConcurrentHashMap <>();
52-
37+ /**
38+ * Permite a depuração dos detalhes da requisição sendo efetuada
39+ */
40+ public static boolean DEBUG = false ;
5341 private final String url ;
5442
5543 private final Map <String , String > data = new HashMap <>();
@@ -62,6 +50,8 @@ public final class HttpRequest {
6250
6351 private int timeout ;
6452
53+ private boolean binary ;
54+
6555 private String method ;
6656
6757 private String userAgent ;
@@ -181,6 +171,18 @@ public HttpRequest timeout(final int timeout) {
181171 return this ;
182172 }
183173
174+
175+ /**
176+ * Define que o resultado esperado é um binário. Ex. Download
177+ *
178+ * @param binary
179+ * @return
180+ */
181+ public HttpRequest binary (final boolean binary ) {
182+ this .binary = binary ;
183+ return this ;
184+ }
185+
184186 /**
185187 * Define o UserAgent
186188 *
@@ -551,9 +553,6 @@ private <T> HttpResponse executeRequest() throws ProtocolException, MalformedURL
551553 }
552554
553555
554- // Accept-Encoding : gzip
555- reader = new InputStreamReader (inputStream , StandardCharsets .UTF_8 );
556-
557556 // Obtém os headers da conexão
558557 response .headers = new HashMap <>(connection .getHeaderFields ());
559558
@@ -582,14 +581,32 @@ private <T> HttpResponse executeRequest() throws ProtocolException, MalformedURL
582581 // Seta a referencia para o gerenciador de cookie usado na resposta
583582 response .cookieManager = this .cookieManager ;
584583
585- in = new BufferedReader (reader );
586- final StringBuilder body = new StringBuilder ();
587- String inputLine ;
588- while ((inputLine = in .readLine ()) != null ) {
589- body .append (inputLine );
590- body .append ('\r' );
584+ if (this .binary ) {
585+ ByteArrayOutputStream buffer = new ByteArrayOutputStream ();
586+
587+ int nRead ;
588+ byte [] data = new byte [16384 ];
589+
590+ while ((nRead = inputStream .read (data , 0 , data .length )) != -1 ) {
591+ buffer .write (data , 0 , nRead );
592+ }
593+
594+ response .data = buffer .toByteArray ();
595+ } else {
596+
597+ // Accept-Encoding : gzip
598+ reader = new InputStreamReader (inputStream , StandardCharsets .UTF_8 );
599+
600+ in = new BufferedReader (reader );
601+ final StringBuilder body = new StringBuilder ();
602+ String inputLine ;
603+ while ((inputLine = in .readLine ()) != null ) {
604+ body .append (inputLine );
605+ body .append ('\r' );
606+ }
607+ response .content = body .toString ();
591608 }
592- response . content = body . toString ();
609+
593610
594611 return response ;
595612 } finally {
0 commit comments