使用ApacheBench post命令时,如果post文件中只有一个参数时,可以返回正常结果;但如果post文件中有多个参数时,总是得不到想要的返回结果,究其原因,主要还是在post文件里参数的写法。

正确写法是:

ab -n4 -c2 -v4  -p "post.txt" -T "application/x-www-form-urlencoded" "http://192.168.0.52:4567/index.jsp"

post文件里的参数写法如下:

&param1=a&param2=b&param3=c

写法很奇怪,如果把第一个参数前的&去掉,第一个参数的值总是会取不到。原因有待研究。

呵呵,原因终于发现了。因为以前post文件是用utf-8保存的,当我用ultraedit打开看时,切换到十六进制编辑模式时,发现“param1=a&param2=b&param3=c”最前面多了几个 字符(锘?) ,这样传递过去时第一个参数总是不正确。而加上"&"这个符号能保证每个参数是完整的且能正确取到值。为了验证这个想法,把post文件按照默认的ANSI编码形式进行保存,内容为”param1=a&param2=b&param3=c“,此时可以返回正常的结果了。对于这种问题,以后得小心编码格式了。

另外,如果是get方式多个参数的话,请求的url必须要加上双引号,否则也报错说后面的几个参数不是内部或外部命令。例如:

ab -n4 -c2 -v4 "http://192.168.0.52:4567/index.jsp"

如果是post一个json格式的参数,则可以写为:

ab -n4 -c2 -v4 -p "post.txt" -T "application/json" "http://192.168.0.52:4567/index.jsp"

不过-T写成 application/x-www-form-urlencoded也是可以返回正常结果的。

在网上看到一篇好文章,分享一下,《application/x-www-form-urlencoded、multipart/form-data、text/plain

上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么 写,知其然而不知其所以然。那到底为什么要添加这个属性呢?它是什么意思呢?它又有什么其他可选值呢? 其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x- www-form-urlencoded".这个属性管理的是表单的MIME编码,共有三个值可选:



  ①application/x-www-form-urlencoded (默认值)



  ②multipart/form-data



  ③text/plain



  其中①application/x-www-form-urlencoded是默认值,大家可能在AJAX里见过这 个:xmlHttp.setRequestHeader("Content-Type","application/x-www-form- urlencoded"); 这两个要做的是同一件事情,就是设置表单传输的编码。在AJAX里不写有可能会报错,但是在HTML的form表单里是可以不写 enctype="application/x-www-form-urlencoded"的,因为默认HTML表单就是这种传输编码类型。而 ②multipart-form-data是用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或者mp3等等。 ③text/plain是纯文本传输的意思,在发送邮件时要设置这种编码类型,否则会出现接收时编码混乱的问题,网络上经常拿text/plain和 text/html做比较,其实这两个很好区分,前者用来传输纯文本文件,后者则是传递html代码的编码类型,在发送头文件时才用得上。①和③都不能用 于上传文件,只有multipart/form-data才能完整的传递文件数据。



  上面提到的MIME,它的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉 浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器将 MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。



  简单说,MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。



  浏览器接收到文件后,会进入插件系统进行查找,查找出哪种插件可以识别读取接收到的文件。如果浏览器不清楚调用哪种插件系统,它可能会告诉用户缺少某 插件,或者直接选择某现有插件来试图读取接收到的文件,后者可能会导致系统的崩溃。传输的信息中缺少MIME标识可能导致的情况很难估计,因为某些计算机 系统可能不会出现什么故障,但某些计算机可能就会因此而崩溃。



     检查一个服务器是否正确设置了MIME类型的步骤是:



  1. 在Netscape浏览器中打开服务器网页



  2. 进入"View"菜单,选择"Page Info"



  3. 在弹出的窗口中点击上层框架中的"EMBED"



  4. 在下层框架中查看MIME的类型是否为"application/x-director"或"application/x-shockwave- flash",如果是上述信息的话表明服务器已经正确设置了MIME类型;而如果MIME类型列出的是文本内容、八位一组的数据或是其它形式均表明服务器 的MIME类型没有设置正确。



  如果服务器没有正确标明其发送的数据的类型,服务器管理员应该正确添加相关信息,具体操作方法非常简单快捷。



  每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。



  常见的MIME类型



  
  超文本标记语言文本 .html,.html text/html



    普通文本 .txt text/plain



    RTF文本 .rtf application/rtf



    GIF图形 .gif image/gif



    JPEG图形 .jpeg,.jpg image/jpeg



    au声音文件 .au audio/basic



    MIDI音乐文件 mid,.midi audio/midi,audio/x-midi



    RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio



    MPEG文件 .mpg,.mpeg video/mpeg



    AVI文件 .avi video/x-msvideo



    GZIP文件 .gz application/x-gzip



    TAR文件 .tar application/x-tar



    Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认他们使用 的MIME类型为标准类型。因此他们使用在类别中以x-开头的方法标识这个类别还没有成为标准,例如:x-gzip,x-tar等。事实上这些类型运用的 很广泛,已经成为了事实标准。只要客户机和服务器共同承认这个MIME类型,即使它是不标准的类型也没有关系,客户程序就能根据MIME类型,采用具体的 处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的 MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。

----------------------------------------------------------------

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,

这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;

只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.

enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。

form里面的input的值以2进制的方式传过去,

所以request就得不到值了。也就是说加了这段代码,用request就会传递不成功,取表单值加入数据库时,用到下面的:



SmartUpload su = new SmartUpload();//新建一个SmartUpload对象



su.getRequest().getParameterValues();取数组值



su.getRequest().getParameter( );取单个参数单个值

ajax中的application/x-www-form-urlencoded中的使用

一,HTTP上传的基本知识

在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。下边是说明: application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 text/plain:窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。

补充

form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application /x-www-form-urlencoded。

当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1& amp; amp;name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。

当action为post时候,浏览器把form数据封装到http body中,然后发送到server。

如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。但是如果有 type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上 Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件 name)等信息,并加上分割符(boundary)。

二,使用中需要注意的地方

在AJAX往服务器上传数据是,设置了content-type为application/x-www-form-urlencoded,此时是对整个发 送内容作了编码,并不是对名字对应的值做了编码。因此,在服务器端,通过request.getParameter("name")的方式取值,是有问题 的。

有两种解法办法:

1)改服务器端: 采用流的方式硬编码

InputStream stream=request.getInputStream();

InputStreamReader isr=new InputStreamReader(stream);

BufferedReader br=new BufferedReader(isr);

String str=br.readLine();   

System.out.println(str);



str=URLDecoder.decode(str,"gb2312");

System.out.println(str);

br.close();

2)改客户端:更改数据发送结构

在往服务器上发数据的时候,使用name=escape(value)的方式组对

此时在服务器代码中,通过request.getParameter("name")获得的数值,就不用编码了

ApacheBench post多个参数相关推荐

  1. ApacheBench(ab)使用详解

    ab命令原理 Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力.  ab命令对发出负载的计算机要求很低,既不会占用 ...

  2. ab压力测试_CentOS安装压力测试工具ApacheBench(ab)

    官方文档: https://httpd.apache.org/docs/2.4/programs/ab.html ab原理: ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访 ...

  3. 使用ab(apachebench)进行压力测试

    2019独角兽企业重金招聘Python工程师标准>>> 环境:WAMP(windows+apache+mysql+php) ab路径:E:\apache\bin\ab.exe 操作: ...

  4. ab ApacheBench web测试工具

    http://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/ ApacheBench参数说明格式:ab [options] [http://]host ...

  5. ab压力测试工具linux,【Linux】ApacheBench(ab)压力测试工具

    AB的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比 ...

  6. 基准测试 ApacheBench ab学习

    2019独角兽企业重金招聘Python工程师标准>>> ab的全称是ApacheBench,是 Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark ...

  7. apacheBench对网站进行压力测试

    apacheBench对网站进行压力测试 分类: 学习 2014-02-19 10:35 4154人阅读 评论(1) 收藏 举报 apacheBench压力测试 Apache Benchmark下载 ...

  8. ApacheBench测试Web并发

    一.安装 Liunx和Mac是自带ApacheBench,无需手动安装,可直接使用. Windows:[参考](http://www.ylzx8.cn/yingyongfuwuqi/apache/28 ...

  9. Apache Bench的安装与使用(前端使用apache-bench进行并发测试)

    Apache Bench安装与使用 一.Apache Bench简介 ApacheBench 是 Apache 服务器自带的一个web压力测试工具,简称ab.ab又是一个命令行工具,对发起负载的本机要 ...

最新文章

  1. 网页中的盒模型css属性,详解CSS中的Box Model盒属性的使用
  2. Git 提交代码 简单步骤
  3. 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
  4. go defer性能测试
  5. ConcurrentHashMap1.7和1.8的源码分析比较
  6. 虚拟云服务器 网站备案,云虚拟主机可以做备案吗
  7. 我的Android学习之路
  8. 决策树(六)--随机森林
  9. idea装vue插件之后没有代码提示怎么办呢
  10. RouterOS 端口映射与回流
  11. awg线径与电流_awg线径对照表(awg线径与电流对照表)
  12. [RQNOJ PID85]三个袋子 {快速幂 or 矩阵乘法}
  13. keyshot pro 10报许可证(*.lic)对该计算机无效解决办法
  14. java怎么注释多行注释_java的注释格式和多行注释和单行注释
  15. vue项目-后台管理系统
  16. 一文读懂时序预测模型(1)
  17. BGP在数据中心的应用5——BGP生命周期管理
  18. 中职高考计算机专业真题,中职高考计算机试题及答案
  19. 仿大众点评——秒杀系统部分01
  20. Datawhale 7月学习——李弘毅深度学习:深度学习介绍和反向传播机制

热门文章

  1. 【mysql】位运算符
  2. Poster Design
  3. HtmlUnit基础
  4. etc/xinetd.d目录介绍
  5. ptp精准时间协议_网络时钟同步协议– NTP, PTP – 默默的点滴
  6. 邻接矩阵的定义和例子
  7. Simple polygon
  8. android 全键盘手机排行榜,小巧又精悍 3大系统直板全键盘手机搜罗
  9. Linux虚拟主机与Windows虚拟主机之间有什么区别
  10. 复选框全部选中/全部取消