5.post上传和压缩、插件模拟请求
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上传和压缩、插件模拟请求的更多相关文章
- 利用canvas对上传图片进行上传前压缩
利用谷歌调式工具发现,图片大小直接影响着首屏加载时间. 且考虑到后期服务端压力,图片压缩特别必要. 本文是前端利用canvas实现图片.参考文章:https://www.cnblogs.com/007 ...
- bootstrap-fileinput上传文件的插件使用总结----编辑已成功上传过的图片
http://plugins.krajee.com/file-plugin-methods-demo 具体操作 http://plugins.krajee.com/file-preview-manag ...
- PHP实现图片上传并压缩
本文实例讲解了PHP图片上传并压缩的实现方法,分享给大家供大家参考,具体内容如下 使用到三个文件 connect.php:连接数据库 test_upload.php:执行SQL语句 upload_im ...
- Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】
本文实例讲述了Java实现的上传并压缩图片功能.分享给大家供大家参考,具体如下: 先看效果: 原图:1.33M 处理后:27.4kb 关键代码: package codeGenerate.util; ...
- Nodejs实现图片的上传、压缩预览、定时删除
前言 我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番.第一步,node基本配置 这里我们用到的是koa框架,它可是继express框架之后又一个更富有表现力.更健壮的web框架 ...
- 百度编辑器上传大视频报http请求错误怎么办
百度编辑器UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码,所以受到很多开放人员的青睐.但是有时 ...
- element-ui上传组件,通过自定义请求上传文件
记录使用element-ui上传组件,通过自定义请求上传文件需要注意的地方. <el-upload ref="uploadMutiple" :auto-upload=&quo ...
- C# 应用 - 使用 HttpClient 发起上传文件、下载文件请求
1. 示例代码 using System; using System.IO; using System.Net.Http; /// <summary> /// 下载文件 /// </ ...
- post上传和压缩、插件模拟请求
gzip gzip一种压缩方式,或者是文件形式,它主要用于网络传输数据的压缩 gzip压缩好不好用 浏览器:网速一定.内容越小.请求响应的速度是不是更快 手机server:返回数据类型是json/ ...
随机推荐
- 《深入PHP与jQuery开发》读书笔记——Chapter3
<深入PHP与jQuery开发>第三章学习笔记 1.PHP的魔术方法(在对象中发生某些例行事件时会自动调用这些方法) PHP提供了魔术方法__construct()(构造函数),在新对象被 ...
- 一个简单的javascript深拷贝
var extendDeep = function(parent,child){ var i, toStr = Object.prototype.toString, astr = '[object A ...
- Python 正则表达式_re模块_使用compile加速
使用compile加速 compile( rule [,flag] ) 将正则规则编译成一个Pattern对象,以供接下来使用. 第一个参数是规则式,第二个参数是规则选项. 返回一个Pattern对象 ...
- Javascript样例之文档章节滚动全版(DOM)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABBMAAAC5CAIAAAD1bOCRAAAMEUlEQVR4nO3d4XEbyREGUGRCZQDGcG
- django template中load的作用
某些应用提供自定义标签和过滤器库. 要在一个模板中访问它们, 使用 {% load %} 标签: {% load comments %} {% comment_form for blogs.entri ...
- 【SpringMVC】SpringMVC系列10之视图与视图解析器
10.视图与视图解析器 10.1.概述 请求处理方法执行完成后,最终返回一个 ModelAndView处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象, ...
- java中四种阶乘的计算
package com.zf.s2;//创建一个包 import java.math.BigInteger;//导入类 import java.util.ArrayList; import jav ...
- MySQL报错:Packets larger than max_allowed_packet are not allowed 的解决方案
在导大容量数据特别是CLOB数据时,可能会出现异常:“Packets larger than max_allowed_packet are not allowed”. 这是由于MySQL数据库有一个系 ...
- 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 ...
- July 31st, Week 32nd Sunday, 2016
If you wept for the missing sunset, you would miss all the shining stars. 如果你为错过夕阳而哭泣,那你有可能也会错过灿烂的星空 ...