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包:很多框架上传图片就是用他

        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直接在浏览器网页就打开了

5.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. PHP实现图片上传并压缩

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Linux下远程cp命令scp

    2014-2.19  PS1.在用此命令cpLinux与Linux之间的数据时发现有些服务器上默认没有安装scp但用yum -y install scp提示么有这样的包 后来发现原来scp工具的安装包 ...

  2. logback 常用配置详解(二)

    <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的组件. <appende ...

  3. C# 多线程通信详解

    一.WaitHandler的类层次 可以看到 WaitHandle是 事件(EventWaitHandle).互斥体(Mutex).信号量(Sempahore)的父类. WaitHandle我们最经常 ...

  4. 怎么让dedecms生成html页面更快些

    如何让织梦生成html页面更快些呢? 1.把文章模板里的“相关文章”.“热点文章”.“推荐文章”这类的标记删除了,用其它方式,如:shtml.js 引入 2.把织梦模板里用标记表示的模板路径.php附 ...

  5. PHP数字格式化,每三位逗号分隔数字,可以保留小数

    在报价的时候为了给浏览者更清晰明确的数字,所以需要用到数字格式化,有两种方法,一种自己写函数,另一种当然是系统自带的,其实我更喜欢系统自带的. 先来系统简单的: string number_forma ...

  6. (转载)解决ListView中使用EditText所遇到的一些冲突

    大家都知道在listView中使用editText,在输入过程中是有冲突的.今天稍微研究了一下这个问题,有一点点小小的心得和大家一起分享下. 首先建立一个最简单的demo,主界面就是一个ListVie ...

  7. SELinux入门

    导读 如果你在之前的Linux生涯中都禁用或忽略了SELinux,这篇文章就是专门为你写的:这是一篇对存在于你的Linux桌面或服务器之下的SELinux系统的介绍,它能够限制权限,甚至消除程序或守护 ...

  8. Unity游戏开发之“屏幕截图”

    原地址:http://sygame.lofter.com/post/117105_791680 在unity游戏开发中,可能会遇到在游戏中截屏的效果.这儿提供两种截屏方法.(方法二提供显示截图缩略图代 ...

  9. request-log-analyzer日志分析

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 日志分析是常见的工作,方法如下: 使用工具:request-log-analyzer安装:$ ...

  10. 让jar程序在linux上一直执行

    当我们把java程序打成jar包后,放到linux上通过putty或其它终端执行的时候,如果按照:java -jar xxxx.jar执行,当我们退出putty或终端的时候,xxxx.jar这个程序也 ...