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. 《深入PHP与jQuery开发》读书笔记——Chapter3

    <深入PHP与jQuery开发>第三章学习笔记 1.PHP的魔术方法(在对象中发生某些例行事件时会自动调用这些方法) PHP提供了魔术方法__construct()(构造函数),在新对象被 ...

  2. 一个简单的javascript深拷贝

    var extendDeep = function(parent,child){ var i, toStr = Object.prototype.toString, astr = '[object A ...

  3. Python 正则表达式_re模块_使用compile加速

    使用compile加速 compile( rule [,flag] ) 将正则规则编译成一个Pattern对象,以供接下来使用. 第一个参数是规则式,第二个参数是规则选项. 返回一个Pattern对象 ...

  4. Javascript样例之文档章节滚动全版(DOM)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABBMAAAC5CAIAAAD1bOCRAAAMEUlEQVR4nO3d4XEbyREGUGRCZQDGcG

  5. django template中load的作用

    某些应用提供自定义标签和过滤器库. 要在一个模板中访问它们, 使用 {% load %} 标签: {% load comments %} {% comment_form for blogs.entri ...

  6. 【SpringMVC】SpringMVC系列10之视图与视图解析器

    10.视图与视图解析器 10.1.概述     请求处理方法执行完成后,最终返回一个 ModelAndView处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象, ...

  7. java中四种阶乘的计算

    package com.zf.s2;//创建一个包   import java.math.BigInteger;//导入类 import java.util.ArrayList; import jav ...

  8. MySQL报错:Packets larger than max_allowed_packet are not allowed 的解决方案

    在导大容量数据特别是CLOB数据时,可能会出现异常:“Packets larger than max_allowed_packet are not allowed”. 这是由于MySQL数据库有一个系 ...

  9. Java for LeetCode 054 Spiral Matrix

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  10. July 31st, Week 32nd Sunday, 2016

    If you wept for the missing sunset, you would miss all the shining stars. 如果你为错过夕阳而哭泣,那你有可能也会错过灿烂的星空 ...