比较两种方式的form请求提交
[一]浏览器form表单提交
表单提交, 适用于浏览器提交。像常见的pc端的网银支付,用户在商户商城购买商品,支付时商家系统把交易数据通过form表单提交到三方支付网关,然后用户在三方网关页面完成支付。
下面是一个form表单自动提交案例,将这段html输出到浏览器,会自动提交到目标action。
<form name="payForm" action='http://192.168.40.228:28080/app/userIdentify.do' method='POST' >
<input type='hidden' name='version' value='B2C1.0'>
<input type='hidden' name='tranData' value='PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIj8+PEIyQ1JlcT48Y2FyZE5vPjE8L2NhcmRObz48Y3VzdG9tZXJOYW1lPkpvaG48L2N1c3RvbWVyTmFtZT48b3JkZXJObz5mZjYxYTk5OC0yN2I0LTQ1YzctOWE0Yi0yYmNlY2ZkNmJmN2E8L29yZGVyTm8+PGNlcnRObz4xMzA0MzQxOTgzMDEwNjc1MTE8L2NlcnRObz48dHJhblR5cGU+MTwvdHJhblR5cGU+PGJhbmtJZD4wPC9iYW5rSWQ+PG1vYmlsZT4xPC9tb2JpbGU+PC9CMkNSZXE+'>
<input type='hidden' name='signData' value='c3c50a27dac38c123c4be418b2273049'>
<input type='hidden' name='merchantId' value='M100001564'>
<input type='submit' value='提交' />
<script>document.forms['payForm'].submit();</script>
</form>
[二]服务端httppost
另一种是服务端点对点的http协议的post请求,此方式适用于api接口调用。将请求数据以querystring的格式(a=val1&b=val2&c=val3&...)作为参数传(提)输(交)给服务端。此时注意要把Request的Content-Type设置为application/x-www-form-urlencoded。如下是一个工具方法:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL; /**
*
* HTTP协议POST请求方法
*/
public static String httpMethodPost(String url, String params, String gb) {
if (null == gb || "".equals(gb)) {
gb = "UTF-8";
}
StringBuffer sb = new StringBuffer();
URL urls;
HttpURLConnection uc = null;
BufferedReader in = null;
try {
urls = new URL(url);
uc = (HttpURLConnection) urls.openConnection();
uc.setRequestMethod("POST");
uc.setDoOutput(true);
uc.setDoInput(true);
uc.setUseCaches(false);
uc.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
uc.connect();
if(!StringUtils.isBlank(params)){
DataOutputStream out = new DataOutputStream(uc.getOutputStream());
out.write(params.getBytes(gb));
out.flush();
out.close();
}
in = new BufferedReader(new InputStreamReader(uc.getInputStream(),
gb));
String readLine = "";
while ((readLine = in.readLine()) != null) {
sb.append(readLine);
}
if (in != null) {
in.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
} finally {
if (uc != null) {
uc.disconnect();
}
}
return sb.toString();
}
调用方式:
String url = "http://192.168.40.228:28080/app/userIdentify.do";
String param = String.format("version=%s&tranData=%s&signData=%s&merchantId=%s", version, URLEncoder.encode(tranDataBase64, "GBK"), signData, merchantId);
String responseStr = HttpUtil.httpMethodPost(url, param, "GBK");
[三]服务端httppost的另一种实现
另一种是针对于util方法暴露的参数是Map的场景:
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map; public final class HttpUtil { public static String httpMethodPost(String url, Map<String, String> paramMap) {
CloseableHttpClient httpClient = HttpClients.createDefault();
boolean var3 = true; byte result;
try {
HttpPost post = new HttpPost(url);
UrlEncodedFormEntity uefEntity = null;
List<NameValuePair> list = new ArrayList();
if (null != paramMap) {
Iterator var7 = paramMap.entrySet().iterator(); while (var7.hasNext()) {
Map.Entry<String, String> entity = (Map.Entry) var7.next();
list.add(new BasicNameValuePair((String) entity.getKey(), (String) entity.getValue()));
} uefEntity = new UrlEncodedFormEntity(list, "UTF-8");
post.setEntity(uefEntity);
} System.out.println("POST 请求...." + post.getURI());
CloseableHttpResponse httpResponse = httpClient.execute(post);
StatusLine statusLine = httpResponse.getStatusLine();
System.out.println(statusLine); try {
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
return EntityUtils.toString(entity, "UTF-8");
}
} finally {
httpResponse.close();
} } catch (Exception var25) {
var25.printStackTrace();
} finally {
try {
if (httpClient != null) {
httpClient.close();
}
} catch (Exception var23) {
var23.printStackTrace();
}
} return null;
}
}
[三]服务端参数获取方式
ServletRequest对象的如下方法:
ServletInputStream getInputStream() throws IOException;
String getParameter(String var1);
Enumeration getParameterNames();
String[] getParameterValues(String var1);
Map getParameterMap();
结束
▄︻┻┳═一tomcat与jetty接收请求参数的区别
▄︻┻┳═一比较两种方式的form请求提交
▄︻┻┳═一Post方式的Http流请求调用
比较两种方式的form请求提交的更多相关文章
- JAVA发送http GET/POST请求的两种方式+JAVA http 请求手动配置代理
java发送http get请求,有两种方式. 第一种用URLConnection: public static String get(String url) throws IOException { ...
- Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用
1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...
- vue 异步提交php 两种方式传值
1.首先要在php的入口文件写上一条代码,允许异步提交 header("ACCESS-CONTROL-ALLOW-ORIGIN:*"); 2.在vue有两种方式将数据异步提交到ph ...
- [操作系统知识储备,进程相关概念,开启进程的两种方式、 进程Queue介绍]
[操作系统知识储备,进程相关概念,开启进程的两种方式.进程Queue介绍] 操作系统知识回顾 为什么要有操作系统. 程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作 ...
- C#中Post请求的两种方式发送参数链和Body的
POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...
- JavaWeb 发送post请求的2种方式(form、json)
JavaWeb 发送post请求的2种方式(form.json) CreationTime--2018年6月20日10点15分 Author:Marydon 前提:通过HttpClient来实现 ...
- egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名
egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...
- Android请求服务器的两种方式--post, get的区别
android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html Android提交数 ...
- jquery ajax提交表单数据的两种方式
http://www.kwstu.com/ArticleView/kwstu_201331316441313 貌似AJAX越来越火了,作为一个WEB程序开发者要是不会这个感觉就要落伍,甚至有可能在求职 ...
随机推荐
- ros查看摄像头是否打开正常
使用rqt_image_view命令,查看摄像头是否正常输出图像
- 如何移植freertos
要素: 1.两个主要的文件夹移动 2.freertos_config 复制,决定了系统时钟启动位置 3. 启动汇编复制替换 4.it中断管理文件 的相关三个中断注释掉 5.复制delay文件,主要是s ...
- [No0000CD]shell 中的单行注释和多行注释
1. 单行注释 众所周知,# 比如想要注释:echo “ni” # echo "ni" 2. 多行注释 法一: : << ! 语句1 语句2 语句3 语句4 ! 例如 ...
- tensorflow模型在实际上线进行预测的时候,使用CPU工作
最近已经训练好了一版基于DeepLearning的文本分类模型,TextCNN原理.在实际的预测中,如果默认模型会优先选择GPU那么每一次实例调用,都会加载GPU信息,这会造成很大的性能降低. 那么, ...
- 【待补】splay 模板
#define _CRT_SECURE_NO_WARNINGS #include<cmath> #include<iostream> #include<stdio.h&g ...
- 批处理DOS基础命令
批处理(Batch),也称为批处理脚本.顾名思义,批处理就是对某对象进行批量的处理.批处理文件的扩展名为bat. 批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直 ...
- 只读事务@Transactional(readOnly = true)
定义 从设置的时间点(时间点beta)开始到事务结束的过程中,该事务将看不见其他事务所提交的数据,即查询中不会出现别人在beta之后提交的数据. 应用场合 对于一个函数,如果执行的只是 ...
- Webpack 入门(转)
原文:https://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将 ...
- es中如何定位不合法搜索
GET /test_index/test_type/_validate/query?explain{ "query": { "math": { "te ...
- 怎么使用JavaScript进行进制转换
JS 是一个很神奇的语言,内制的的很多函数可以帮我们进行数(进)制转换: JS中可以直接使用16进制: var a = 0xff; //255 将任意进制字符串转换为十进制,如二进制,八进制,十六进制 ...