gzip

gzip一种压缩方式,或者是文件形式,它主要用于网络传输数据的压缩

gzip压缩好不好用

  • 浏览器:网速一定.内容越小.请求响应的速度是不是更快
  • 手机server:返回数据类型是json/xml->文本-->压缩率会很高.

gzip执行流程

  • //1. 告知服务器.客户端支持gzip解压

    * get.addHeader("Accept-Encoding", "gzip");
  • //2. 根据响应头得知服务器知否进行了gzip压缩

    * Header[] headers = response.getHeaders("Content-Encoding");
    for (Header header : headers) {
    if ("gzip".equals(header.getValue())) {
    isUseGzip = true;
    }
    }
  • //3.根据是否使用gzip.解压具体的数据

    if (isUseGzip) {
    GZIPInputStream in = new GZIPInputStream(entity.getContent());
    result = IoUtils.convertStreamToString(in);
    } else {
    result = EntityUtils.toString(entity);
    }
  • 服务端具体怎么支持gzip压缩.根据使用的服务器语言来定

post请求参数的形式

  • key-value--->表单:结构比较单一.而且比较繁琐

    List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
    for (String key : parmas.keySet()) {
    BasicNameValuePair basicNameValuePair = new BasicNameValuePair(key, parmas.get(key));
    parameters.add(basicNameValuePair);
    }
    UrlEncodedFormEntity form = new UrlEncodedFormEntity(parameters);
    post.setEntity(form);
  • jsonString形式:结构灵活.实际开发用的很多

        post.setEntity(new StringEntity(jsonString));
  • file形式:需要jar包httpmime:很多框架上传图片就是用他

        MultipartEntity entity = new MultipartEntity();
    entity.addPart("actimg", new FileBody(file));
    post.setEntity(entity);
  • 多张图片上传:写个循环,用键值,可以用BasicNameValuePair,也可以用file,循环添加,也可以用base64变成string上传
  • Base64:byte[]-->string
    • 上传图片,语音:
    • 存对象到sp:如map
	iv = (ImageView) findViewById(R.id.iv);
findViewById(R.id.btn1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//1.bitmap
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
//2. bitmap-->byte[]
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] byteArray = baos.toByteArray();
//3.byte[]->string,这样就可以用string传给服务器
String bitmapString = Base64.encodeToString(byteArray, Base64.DEFAULT);
System.out.println("bitmapString :" + bitmapString);
//4. string-->byte[];
byte[] bitmapByteArr = Base64.decode(bitmapString, Base64.DEFAULT);
//5.byte[]-->bitmap
Bitmap bitmap2 = BitmapFactory.decodeByteArray(bitmapByteArr, 0, bitmapByteArr.length);
//6.在imageView上设置图片
iv.setImageBitmap(bitmap2);
//obj-->byte[] -->string->sp
}
});

  

post的content-type

  • application/x-www-form-urlencoded :表单类型-->key-value,默认
  • multipart/form-data :文件上传
  • application/json :jsonString
  • text/xml :xml
  • text/plain:文本
  • post.addHeader("Content-Type", "application/json");//如果后台固定死了.不加请求头.同样返回json那就没问题.但是如果后台逻辑和这个请求头有关系.就必须要加上.可以肯定的说.加了万无一失
 
 

MainActivity

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initGzip();
Map<String, String> map = new HashMap<String, String>();
map.put("name", "billy"); initPostKeyValue(map);
String jsonString = "{\"name\":\"billy\"}";
initPostJsonString(jsonString);
File file = new File("");
initPostFile(file);
}
/**
* 文件的上传
* @param file
*/
private void initPostFile(File file) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost("");
//2. 传递二进制类型的参数
MultipartEntity entity = new MultipartEntity();
entity.addPart("actimg", new FileBody(file));
post.setEntity(entity);
httpClient.execute(post);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 使用jsonString post数据库
* @param jsonString
*/
private void initPostJsonString(String jsonString) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost("");
post.addHeader("Content-Type", "application/json");
//Content-Type text/xml-->xml
//Content-Type application/json-->json
//2. 传递jsonString类型的参数
post.setEntity(new StringEntity(jsonString));
httpClient.execute(post);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 使用key-value的形式post数据
* @param parmas 请求参数对于的map集合
*/
private void initPostKeyValue(Map<String, String> parmas) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost("");
//1. 传递key-value的参数
List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
for (String key : parmas.keySet()) {
BasicNameValuePair basicNameValuePair = new BasicNameValuePair(key, parmas.get(key));
parameters.add(basicNameValuePair);
}
UrlEncodedFormEntity form = new UrlEncodedFormEntity(parameters);
post.setEntity(form);
httpClient.execute(post);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void initGzip() {
findViewById(R.id.btn1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
try {
boolean isUseGzip = false;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet("http://httpbin.org/gzip");
//1. 告知服务器.客户端支持gzip解压
get.addHeader("Accept-Encoding", "gzip");
HttpResponse response = httpClient.execute(get);
if (response.getStatusLine().getStatusCode() == 200) {
//2. 根据响应头得知服务器知否进行了gzip压缩
Header[] headers = response.getHeaders("Content-Encoding");
for (Header header : headers) {
if ("gzip".equals(header.getValue())) {
isUseGzip = true;
}
}
HttpEntity entity = response.getEntity();
//3.根据是否使用gzip.解压具体的数据
String result = "";
if (isUseGzip) {
GZIPInputStream in = new GZIPInputStream(entity.getContent());
result = IoUtils.convertStreamToString(in);
} else {
result = EntityUtils.toString(entity);
}
System.out.println("result:" + result);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
});
}
}

  

 

restclient(firfox插件),postman(谷歌浏览器)

网络请求模拟插件,post用,get直接在浏览器网页就打开了

post上传和压缩、插件模拟请求的更多相关文章

  1. 利用canvas对上传图片进行上传前压缩

    利用谷歌调式工具发现,图片大小直接影响着首屏加载时间. 且考虑到后期服务端压力,图片压缩特别必要. 本文是前端利用canvas实现图片.参考文章:https://www.cnblogs.com/007 ...

  2. bootstrap-fileinput上传文件的插件使用总结----编辑已成功上传过的图片

    http://plugins.krajee.com/file-plugin-methods-demo 具体操作 http://plugins.krajee.com/file-preview-manag ...

  3. 百度编辑器上传大视频报http请求错误怎么办

    百度编辑器UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码,所以受到很多开放人员的青睐.但是有时 ...

  4. PHP实现图片上传并压缩

    本文实例讲解了PHP图片上传并压缩的实现方法,分享给大家供大家参考,具体内容如下 使用到三个文件 connect.php:连接数据库 test_upload.php:执行SQL语句 upload_im ...

  5. Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】

    本文实例讲述了Java实现的上传并压缩图片功能.分享给大家供大家参考,具体如下: 先看效果: 原图:1.33M 处理后:27.4kb 关键代码: package codeGenerate.util; ...

  6. element-ui上传组件,通过自定义请求上传文件

    记录使用element-ui上传组件,通过自定义请求上传文件需要注意的地方. <el-upload ref="uploadMutiple" :auto-upload=&quo ...

  7. C# 应用 - 使用 HttpClient 发起上传文件、下载文件请求

    1. 示例代码 using System; using System.IO; using System.Net.Http; /// <summary> /// 下载文件 /// </ ...

  8. Nodejs实现图片的上传、压缩预览、定时删除

    前言 我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番.第一步,node基本配置 这里我们用到的是koa框架,它可是继express框架之后又一个更富有表现力.更健壮的web框架 ...

  9. 5.post上传和压缩、插件模拟请求

      gzip gzip一种压缩方式,或者是文件形式,它主要用于网络传输数据的压缩 gzip压缩好不好用 浏览器:网速一定.内容越小.请求响应的速度是不是更快 手机server:返回数据类型是json/ ...

随机推荐

  1. 解决Tomcat文件上传超时问题.

    现象描述: 系统支持多文件分片上传,而且支持进度条实时更新.月底当用户集中大批量做文件上传时,文件经常上传到100%就会卡主.按F12打开管理控制台,报错:“XMLHttpRequest:网络错误 0 ...

  2. 源码分析之groupcache之consistenthash

    很多时候读开源的库就是为自己准备大量的代码库,优秀开源项目代码质量比绝大部分人的代理质量都要高. 依赖的库 ```import ( "hash/crc32" "sort& ...

  3. Blog Part I

    写随笔是不可能写的,这辈子都不可能写的. ——https://music.163.com/song?id=5039077 ============ Blog?不,并不擅长,毕竟Blog不是Novel, ...

  4. jquery学习总结1-12

    一.jquery入口函数的几种写法 1.$(document).ready(function()  { } ) ; 2.jquery(document).ready(function()  { } ) ...

  5. Django模板继承和引用

    一.模板继承 1.模板继承可以在创建一个基本“骨架”后,被其它子模板继承并覆盖,通过修改基础模板可以修改子模板中的所有框架 2.在模板teacher文件夹下创建基础模板 {% block xxx}与{ ...

  6. String类笔记

    首先要知道,String类的核心是一个数组 我们所写的字符串序列都会放到这个char数组中,且前面有final修饰,所以只能赋值一次. 所以String创建的是不可变字符串序列,不可修改.如果要对其进 ...

  7. Ramnit 蠕虫分析

    0x00前言 Ramnit 蠕虫是一种通过可移动驱动器传播的蠕虫.该蠕虫还可以作为后门,允许远程攻击者访问受感染的计算机,通常会寄生在用户的浏览器中,难以察觉,因此每天都有数以万计的用户受其困扰. 分 ...

  8. formdata的使用方法

    function upload_single_file(value){ if(value==''){ layer.msg('请添加文件',{time:1500}) }else{ var formDat ...

  9. fromdata上传多个文件

    function upload_single_file(value){ if(value==''){ layer.msg('请添加文件',{time:1500}) }else{ var formDat ...

  10. Day06 (黑客成长日记) 初识函数和返回值的作用

    定义函数: 1.初识函数: 我们在学习字符串时,有这样的操作: li = 'tsy be ba bvake ' print(len(li)) 这样可以打印出li的长度,我们利用了python中的len ...