[一]浏览器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请求提交的更多相关文章

  1. JAVA发送http GET/POST请求的两种方式+JAVA http 请求手动配置代理

    java发送http get请求,有两种方式. 第一种用URLConnection: public static String get(String url) throws IOException { ...

  2. Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用

    1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...

  3. vue 异步提交php 两种方式传值

    1.首先要在php的入口文件写上一条代码,允许异步提交 header("ACCESS-CONTROL-ALLOW-ORIGIN:*"); 2.在vue有两种方式将数据异步提交到ph ...

  4. [操作系统知识储备,进程相关概念,开启进程的两种方式、 进程Queue介绍]

    [操作系统知识储备,进程相关概念,开启进程的两种方式.进程Queue介绍] 操作系统知识回顾 为什么要有操作系统. 程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作 ...

  5. C#中Post请求的两种方式发送参数链和Body的

    POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...

  6. JavaWeb 发送post请求的2种方式(form、json)

      JavaWeb 发送post请求的2种方式(form.json) CreationTime--2018年6月20日10点15分 Author:Marydon 前提:通过HttpClient来实现 ...

  7. egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名

    egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...

  8. Android请求服务器的两种方式--post, get的区别

    android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html Android提交数 ...

  9. jquery ajax提交表单数据的两种方式

    http://www.kwstu.com/ArticleView/kwstu_201331316441313 貌似AJAX越来越火了,作为一个WEB程序开发者要是不会这个感觉就要落伍,甚至有可能在求职 ...

随机推荐

  1. 查询自己的apple购买历史

    https://secure1.store.apple.com/cn/order/list

  2. Exception 01 : org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [foo]

    异常名称 org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [foo] 异常截屏 异常详细信息 org.hibernat ...

  3. 关于ionic2 更新到ionic3 后组件不能用的解决方案

    错误代码就不贴出来了,直接上代码吧! 首先在xx.module.ts添加 1.import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2.添加 ...

  4. [skill][telnet] 用telnet获取一个网页

    一直也搞不懂, telnet到底是干嘛用的. 然而, 它可以得到一个网页. /home/tong/Data/performance_test [tong@T7] [:] > telnet nyu ...

  5. [maven] 初试maven

    环境 CentOS 6 一, 安装: [root@okk ~]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binaries ...

  6. inet_addr()和inet_ntoa()使用注意

    inet_addr():无法处理255.255.255.255,认为该ip为非法,返回-1 inet_ntoa():转换后地址存储在静态变量中,连续两次调用,第二次会覆盖第一次的值. 建议使用inet ...

  7. mint-ui是什么?怎么使用?说出至少三个组件使用方法?

    mint-ui是基于vue的前端组件库.npm安装,然后import样式和js,vue.use(mintUi)全局引入.在单个组件局部引入:import { Toast } from 'mint-ui ...

  8. SpringMVC(三):参数绑定、输入输出转换

    一.参数解析绑定 1. 自定义绑定:不绑定某些项 @InitBinder private void initBinder(WebDataBinder dataBinder) { dataBinder. ...

  9. h5 中的 section 标签

    转自 http://www.studyofnet.com/news/331.html 本文导读:<section> 标签定义文档中的节(section.区段).比如章节.页眉.页脚或文档中 ...

  10. WCG distribution of byteball

    https://steemit.com/byteball/@punqtured/processing-for-good-get-rewarded-for-crunching-numbers-to-cu ...