HttpClient4.5を使用して、リクエストヘッダにAccept-Encoding=gzipを設定して
ウェブサイトに送信しましたが返ってくるのは非圧縮のデータです。
エクリプス等でソースを実行するだけで確認出来るようにしているので
結果だけでも書いてくれたら助かります。
###該当のソースコード
import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.GZIPInputStream; import org.apache.commons.io.IOUtils; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.LaxRedirectStrategy; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class HttpClientV4Test { public void executeV4getTest() throws IOException { System.out.println(new Object() { }.getClass().getEnclosingMethod().getName() + " start"); HttpGet method = null;// getメソッド try { /*- * URL */ method = new HttpGet("https://www.blogger.com/about/?hl=ja"); System.out.println("url : " + method.getURI()); /*- * リクエストヘッダ */ List<Header> requestHeaders = new ArrayList<Header>(); requestHeaders.add(new BasicHeader("Host", "www.blogger.com")); requestHeaders.add(new BasicHeader("Connection", "Keep-Alive")); requestHeaders .add(new BasicHeader( "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36")); requestHeaders .add(new BasicHeader( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")); requestHeaders.add(new BasicHeader("Accept-Encoding", "gzip, deflate")); requestHeaders.add(new BasicHeader("Accept-Language", "ja-JP")); System.out.println("requestHeaders : "); for (Header header : requestHeaders) { System.out .println(header.getName() + " : " + header.getValue()); } /*- * クライアント */ CloseableHttpClient client = HttpClientBuilder.create() .setDefaultHeaders(requestHeaders) .setRedirectStrategy(new LaxRedirectStrategy())// HTTPステータスが301,302の場合は自動でリダイレクトする .build(); /*- * サーバへの送信~レスポンスの受信 */ HttpResponse response = client.execute(method); System.out.println("status : " + response.getStatusLine().getStatusCode()); /*- * レスポンスヘッダを保存 */ Header[] headers = response.getAllHeaders(); System.out.println("responseHeaders : "); for (Header header : headers) { System.out .println(header.getName() + " : " + header.getValue()); } /*- * キャラクターセットを取得 */ String contentType = response.getEntity().getContentType() .getValue(); int charsetIndex = contentType.indexOf("charset="); String charset = "UTF-8"; if (charsetIndex != -1) { charset = contentType .substring(contentType.indexOf("charset=") + 8); } /*- * レスポンスボディがgzipであるか確認 */ boolean gzip = false; for (Header header : headers) { if (header.getName().equals("Content-Encoding") && header.getValue().equals("gzip")) { gzip = true; break; } } /*- * レスポンスボディの読込 */ String body = null; if (gzip) { System.out.println("*******************recieve gzip data*******************"); GZIPInputStream zippedInputStream = new GZIPInputStream( response.getEntity().getContent()); body = IOUtils.toString(zippedInputStream, charset); } else { System.out.println("*******************recieve TEXT data*******************"); body = EntityUtils.toString(response.getEntity(), charset); } // System.out.println("responseBody : " + body); } finally { /*- * TCP RST送信 */ if (method != null) { method.releaseConnection(); } } System.out.println(new Object() { }.getClass().getEnclosingMethod().getName() + " finsh"); } public static void main(String[] args) { try { new HttpClientV4Test().executeV4getTest(); } catch (Exception e) { e.printStackTrace(); } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。