比较两种方式的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程序开发者要是不会这个感觉就要落伍,甚至有可能在求职 ...
随机推荐
- 基于LSD的直线提取算法
https://blog.csdn.net/tianwaifeimao/article/details/17678669 文献翻译:https://blog.csdn.net/YuYunTan/art ...
- Windows小技巧 -- 目录内打开CMD的快捷方式
工作中常常会有需要在某个文件夹内使用cmd的情况,例如运行某脚本,下面演示几种方法. 以进入以下目录操作为例: 方式一 : 常用的cd命令 cd命令是我们平常使用比较多的方式: 1. Win+R打开c ...
- centos 安装docker-compose
#查看docker compose版本 docker-compose version #查看pip版本 pip -v #上一条语句没有显示版本信息则运行下面语句安装 python-pip yum -y ...
- Java 输入/输出——字节流和字符流
1.流的分类 (1)输入流和输出流(划分输入/输出流时是从程序运行所在内存的角度来考虑的) 输入流:只能从中读取数据,而不能向其写入数据. 输出流:只能向其写入数据,而不能从中读取数据. 输入流主要由 ...
- Ext.app.Application
代表性的ExtJS应用程序,通常是用Ext.container.Viewport创建的经典的单页面应用程序. 一个程序由一个或多个视图(View)组成.视图的行为表现由它对应的视图控制器(Ext.ap ...
- WPF 参数在Page见传递
void goButton_Click(object sender, RoutedEventArgs e) { this.NavigationService.Navigate(new ContentP ...
- python-面向对象-13_文件
文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...
- linux export source
- 兼容ie10及以上css3加载进度动画
html <div class="spinner"> <div class="rect1"></div> < ...
- wc 统计命令
[root@localhost ~]# wc /etc/passwd // 统计行数.单词数.字符数 /etc/passwd [root@localhost ~]# wc -l /etc/passwd ...