From 42afbabd30b77e17813b3ce40101dda58b109257 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Tue, 11 Apr 2017 00:04:59 +0300 Subject: [PATCH] browser update --- pom.xml | 18 ++++- src/main/java/ru/dmitriymx/vkapi/VkApi.java | 2 + .../dmitriymx/vkapi/browser/ApacheBroswe.java | 75 +++++++++++++++++++ .../vkapi/browser/ApacheResponse.java | 32 ++++++++ .../vkapi/{ => browser}/Browser.java | 3 +- .../vkapi/{ => browser}/Response.java | 2 +- 6 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/dmitriymx/vkapi/browser/ApacheBroswe.java create mode 100644 src/main/java/ru/dmitriymx/vkapi/browser/ApacheResponse.java rename src/main/java/ru/dmitriymx/vkapi/{ => browser}/Browser.java (74%) rename src/main/java/ru/dmitriymx/vkapi/{ => browser}/Response.java (81%) diff --git a/pom.xml b/pom.xml index cdb8bba..1923989 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ ru.dmitriymx vkapiuni - 1.0-SNAPSHOT + 1.1-SNAPSHOT UTF-8 @@ -30,6 +30,22 @@ gson 2.8.0 + + commons-io + commons-io + 2.5 + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + commons-logging + commons-logging + + + diff --git a/src/main/java/ru/dmitriymx/vkapi/VkApi.java b/src/main/java/ru/dmitriymx/vkapi/VkApi.java index b301ed0..20554e5 100644 --- a/src/main/java/ru/dmitriymx/vkapi/VkApi.java +++ b/src/main/java/ru/dmitriymx/vkapi/VkApi.java @@ -8,6 +8,8 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import ru.dmitriymx.vkapi.browser.Browser; +import ru.dmitriymx.vkapi.browser.Response; import java.io.IOException; import java.util.Map; diff --git a/src/main/java/ru/dmitriymx/vkapi/browser/ApacheBroswe.java b/src/main/java/ru/dmitriymx/vkapi/browser/ApacheBroswe.java new file mode 100644 index 0000000..deae5d4 --- /dev/null +++ b/src/main/java/ru/dmitriymx/vkapi/browser/ApacheBroswe.java @@ -0,0 +1,75 @@ +/* + * DmitriyMX + * 2017-04-10 + */ +package ru.dmitriymx.vkapi.browser; + +import org.apache.commons.io.IOUtils; +import org.apache.http.Header; +import org.apache.http.HttpMessage; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; + +import java.io.IOException; +import java.io.InputStream; + +public class ApacheBroswe implements Browser { + private final HttpClient client = HttpClients.createDefault(); + private String userAgent = "Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36"; + + @Override + public void setUserAgent(String userAgent) { + this.userAgent = userAgent; + } + + @Override + public Response get(String url) throws IOException { + return request(new HttpGet(url)); + } + + @Override + public Response post(String url, String data) throws IOException { + HttpPost requestPost = new HttpPost(url); + requestPost.setHeader("Content-Type", "application/x-www-form-urlencoded"); + if (data != null) { + requestPost.setEntity(new StringEntity(data)); + } + + return request(requestPost); + } + + private Response request(HttpRequestBase request) throws IOException { + setup_headers(request); + HttpResponse response = client.execute(request); + + try (InputStream streamContent = response.getEntity().getContent()) { + String contentRaw = IOUtils.toString(streamContent, "UTF-8"); + String contentType = "text/plain"; + for (Header header : response.getAllHeaders()) { + if (header.getName().equalsIgnoreCase("Content-Type")) { + contentType = header.getValue(); + if (contentType.contains(";")) { + contentType = contentType.split(";")[0]; + } + break; + } + } + + return new ApacheResponse( + response.getStatusLine().getStatusCode(), + contentType, contentRaw + ); + } + } + + private void setup_headers(HttpMessage request) { + request.addHeader("Connection", "close"); + request.addHeader("Accept-Encoding", "deflate"); + request.addHeader("User-Agent", userAgent); + } +} diff --git a/src/main/java/ru/dmitriymx/vkapi/browser/ApacheResponse.java b/src/main/java/ru/dmitriymx/vkapi/browser/ApacheResponse.java new file mode 100644 index 0000000..91613b2 --- /dev/null +++ b/src/main/java/ru/dmitriymx/vkapi/browser/ApacheResponse.java @@ -0,0 +1,32 @@ +/* + * DmitriyMX + * 2017-04-10 + */ +package ru.dmitriymx.vkapi.browser; + +public class ApacheResponse implements Response { + private final int code; + private final String contentType; + private final String content; + + ApacheResponse(int code, String contentType, String content) { + this.code = code; + this.contentType = contentType; + this.content = content; + } + + @Override + public int getStatus() { + return code; + } + + @Override + public String getContentType() { + return contentType; + } + + @Override + public String getContent() { + return content; + } +} diff --git a/src/main/java/ru/dmitriymx/vkapi/Browser.java b/src/main/java/ru/dmitriymx/vkapi/browser/Browser.java similarity index 74% rename from src/main/java/ru/dmitriymx/vkapi/Browser.java rename to src/main/java/ru/dmitriymx/vkapi/browser/Browser.java index e7d3693..2281a4f 100644 --- a/src/main/java/ru/dmitriymx/vkapi/Browser.java +++ b/src/main/java/ru/dmitriymx/vkapi/browser/Browser.java @@ -2,11 +2,12 @@ * DmitriyMX * 2017-04-10 */ -package ru.dmitriymx.vkapi; +package ru.dmitriymx.vkapi.browser; import java.io.IOException; public interface Browser { + void setUserAgent(String userAgent); Response get(String url) throws IOException; Response post(String url, String data) throws IOException; } diff --git a/src/main/java/ru/dmitriymx/vkapi/Response.java b/src/main/java/ru/dmitriymx/vkapi/browser/Response.java similarity index 81% rename from src/main/java/ru/dmitriymx/vkapi/Response.java rename to src/main/java/ru/dmitriymx/vkapi/browser/Response.java index 12cc623..8496471 100644 --- a/src/main/java/ru/dmitriymx/vkapi/Response.java +++ b/src/main/java/ru/dmitriymx/vkapi/browser/Response.java @@ -2,7 +2,7 @@ * DmitriyMX * 2017-04-10 */ -package ru.dmitriymx.vkapi; +package ru.dmitriymx.vkapi.browser; public interface Response { int getStatus();