Java模拟Form表单提交

以支付宝为例,使用Java模拟Form表单提交

/**
 * 建立请求,以表单HTML形式构造(默认)
 * @param sParaTemp 请求参数数组
 * @param strMethod 提交方式。两个值可选:post、get
 * @param strButtonName 确认按钮显示文字
 * @return 提交表单HTML文本
 */
public static String buildRequest(Map<String, String> sParaTemp, String strMethod, String strButtonName) {
    //待请求参数数组
    Map<String, String> sPara = buildRequestPara(sParaTemp);
    List<String> keys = new ArrayList<String>(sPara.keySet());

    StringBuffer sbHtml = new StringBuffer();

    sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + ALIPAY_GATEWAY_NEW
                  + "_input_charset=" + AlipayConfig.input_charset + "\" method=\"" + strMethod
                  + "\">");

    for (int i = 0; i < keys.size(); i++) {
        String name = (String) keys.get(i);
        String value = (String) sPara.get(name);

        sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
    }

    //submit按钮控件请不要含有name属性
    sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\"></form>");
    sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");

    return sbHtml.toString();
}

/**
 * 建立请求,以表单HTML形式构造,带文件上传功能
 * @param sParaTemp 请求参数数组
 * @param strMethod 提交方式。两个值可选:post、get
 * @param strButtonName 确认按钮显示文字
 * @param strParaFileName 文件上传的参数名
 * @return 提交表单HTML文本
 */
public static String buildRequest(Map<String, String> sParaTemp, String strMethod, String strButtonName, String strParaFileName) {
    //待请求参数数组
    Map<String, String> sPara = buildRequestPara(sParaTemp);
    List<String> keys = new ArrayList<String>(sPara.keySet());

    StringBuffer sbHtml = new StringBuffer();

    sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\"  enctype=\"multipart/form-data\" action=\"" + ALIPAY_GATEWAY_NEW
                  + "_input_charset=" + AlipayConfig.input_charset + "\" method=\"" + strMethod
                  + "\">");

    for (int i = 0; i < keys.size(); i++) {
        String name = (String) keys.get(i);
        String value = (String) sPara.get(name);

        sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
    }

    sbHtml.append("<input type=\"file\" name=\"" + strParaFileName + "\" />");

    //submit按钮控件请不要含有name属性
    sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\"></form>");

    return sbHtml.toString();
}

/**
 * 生成要请求给支付宝的参数数组
 * @param sParaTemp 请求前的参数数组
 * @return 要请求的参数数组
 */
private static Map<String, String> buildRequestPara(Map<String, String> sParaTemp) {
    //除去数组中的空值和签名参数
    Map<String, String> sPara = AlipayCore.paraFilter(sParaTemp);
    //生成签名结果
    String sign = buildRequestSign(sPara);

    //签名结果与签名方式加入请求提交参数组中
    sPara.put("sign", sign);
    sPara.put("sign_type", AlipayConfig.sign_type);

    return sPara;
}
上一篇 BeanUtils 实现 Map 与 Bean 进行相互转换
下一篇 Java 8 Optional 类
目录
文章列表
1 Kuboard集群管理
Kuboard集群管理
2
Android Jetpack架构组件(四)CameraX基本功能
Android Jetpack架构组件(四)CameraX基本功能
3
OpenCart Twig模板引擎添加evaluate过滤器
OpenCart Twig模板引擎添加evaluate过滤器
4
Android插件化之startActivity hook实现登录拦截
Android插件化之startActivity hook实现登录拦截
5
React Native学习之RN调用原生UI组件
React Native学习之RN调用原生UI组件
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。