2014-10-14 17 views
6

Android projemi OkHttp'a taşımaya çalışıyorum.OkHttp gzip post body

OkHttp, POST isteklerinin gövdesini gzip ile sıkıştırır mı? o "yeterince büyük" ise

RequestBody body = RequestBody.create(JSON, json); 
Request request = new Request.Builder() 
     .url(url) 
     .post(body) 
     .build(); 

bu RequestBody aslında json gziplemek, yoksa ben elle yapmamız gerekiyor:

I (ana sayfada verilen örnekten) şöyle kullanıyorum? Böyle AndroidHttpClient ile daha önce yaptığımız gibi:

AndroidHttpClient.getCompressedEntity(json, context.getContentResolver()) 

ben elle yapmak gerekiyorsa, en iyi yaklaşım nedir?

Teşekkür ederiz!

cevap

10

OkHttp için GitHub konulara göre, el ile yapmanız gerekir: içeriği sıkıştırmak ve İçerik-Kodlama ekleyin: defa

https://github.com/square/okhttp/issues/350

" en iyi seçenek olmaktan elle yapmak olduğunu gzip ."

byte[] data = json.getBytes("UTF-8"); 
ByteArrayOutputStream arr = new ByteArrayOutputStream(); 
OutputStream zipper = new GZIPOutputStream(arr); 
zipper.write(data); 
zipper.close(); 

RequestBody body = RequestBody.create(JSON, arr.toByteArray()); 
Request request = new Request.Builder() 
     .url(url) 
     .post(body) 
     .header("Content-Encoding", "gzip") 
     .build(); 

buradan AndroidHttpClient kodu aldı ve sadece ByteArrayEntity olmadan satır içi kullanmadan: http://grepcode.com/file/repo1.maven.org/maven2/org.robolectric/android-all/4.2.2_r1.2-robolectric-0/android/net/http/AndroidHttpClient.java#AndroidHttpClient.getCompressedEntity%28byte%5B%5D%2Candroid.content.ContentResolver%29

Bu

ben şimdi yapıyorum nasıl