关闭

java 通过Ajax前台传参数 并用 HttpURLConnection Post方式访问对外的接口

标签: JavahttpConnectionpostajax跨域
10473人阅读 评论(3) 收藏 举报
分类:

    前两天做项目遇到一个问题,就是在自己的项目中要去访问项目外部的接口,从自己的项目中传参数过去,通过调用 对方提供的接口去获取想要得到的数据!第一次接触到在自己项目中去访问和调用外部的资源,然后在网上去找资料,看有没有相关的资料可以参考,然后通过参考其他人的博客资料,最终把这个问题解决了。自己总结一下这个过程,也供遇到相同或者类似问题的朋友可以快速的定位和解决问题。

     下面讲一下我的问题和我解决问题的过程。

     1.问题:对方提供 调用的接口 ,以及要传的参数

     2.解决办法:我应该用什么方法去调用 接口 ,用什么方法去传递参数


下面贴我调用的相关接口信息以及代码:

    1.接口信息

     接口: XXX.XXX.cn/XXX/index.php

    方式:post

    参数:mobile (手机号)....

 说明一下手机号是从前天页面获取:

①: 我前台用Jquery获取手机号:

相关的代码:

<span>手机号</span>
              <div>
                  <input class="form-control" type="text" name="mobile" id="mobile"/>
                    <a href="javascript:void(0);" id="insurance_smbtn"class="btn btn-custom2">搜索</a>
                
            </div>


获取手机号并且将数据传到后台进行处理

$(function(){

    $('#insurance_smbtn').click(function(){
        var mobile = $('#mobile').val();
        if(mobile==''){
            alert("请填写电话");
            return false;
        } else{
            var reg = /^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
            if(!reg.test(mobile)){  //|| !reg1.test(mobileNo) 验证座机
                alert("电话格式不正确");
                return false;
            }
        } 
     // ajax start
        
        $.ajax({
              type: 'POST',
              url :"${pageContext.servletContext.contextPath}/XXXX/queryXXX",
              data: {
                    mobile : mobile,
              },
              success: function(data){
                  
                },//success end
            error : function() {
                alert("出错啦!请从查询!");
                return false;
             } 
            });
        //end ajax          
    });//click end

});


②:后台处理controller中进行相关的接收参数和用HttpConnection Post传递


@RequestMapping(value="/queryXXX")  
 @ResponseBody  //必须要加入响应返回数据
public void queryKeyinElecPolicyService(HttpServletRequest request,HttpServletResponse response) throws IOException {  
            //获取前台传入的参数
            String mobile = request.getParameter("mobile");
             //调用的接口
            String url = "你调用的接口";
           //组装成Map 进行参数的传递
          Map<String,String> params = new HashMap<String,String>();
               params.put("data", mobile);
               //调用Http post 请求
             String resultStr = httpPost(url, params);
             //设置编码格式,并返回Json数据到页面
             response.setContentType("text/json;charset=UTF-8");
         response.getWriter().write(resultStr);//返回数据到前台
    }  
/**
     * 发送Http协议 通过post传参数到接口并返回数据
     * 
     */
    public static String httpPost(String urlStr,Map<String,String> params){
         URL connect;
         StringBuffer data = new StringBuffer();  
        try {  
            connect = new URL(urlStr);  
            HttpURLConnection connection = (HttpURLConnection)connect.openConnection();  
            connection.setRequestMethod("POST");  
            connection.setDoOutput(true); 
            connection.setDoInput(true);
            connection.setUseCaches(false);//post不能使用缓存
            connection.setInstanceFollowRedirects(true);
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            OutputStreamWriter paramout = new OutputStreamWriter(  
                    connection.getOutputStream(),"UTF-8"); 
            String paramsStr = "";   //拼接Post 请求的参数
           for(String param : params.keySet()){
               paramsStr += "&" + param + "=" + params.get(param);
           }  
           if(!paramsStr.isEmpty()){
               paramsStr = paramsStr.substring(1);
           }
            paramout.write(paramsStr);  
            paramout.flush();  
            BufferedReader reader = new BufferedReader(new InputStreamReader(  
                    connection.getInputStream(), "UTF-8"));  
            String line;              
            while ((line = reader.readLine()) != null) {          
                data.append(line);            
            }  
          
            paramout.close();  
            reader.close();  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
       return data.toString();
    }
    


2.Post和Get方法工具类,方便以后使用

(1)工具类

package com.dufy.http;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

/**
 * @author dufy
 * @description Http的Post和Get请求方式
 * @creation 2017年1月12日  
 * @QQ : 742981086 
 */
public class TestHttpRequest {
	
	/**
	 * http get请求方式
	 * @param urlStr
	 * @param params
	 *
	**/
	public static String get(String urlStr,Map<String,String> params){
		InputStream is = null;
		BufferedReader reader = null;
		String resultStr ="";
        try {
        	String paramsStr = "";
        	for(String param : params.keySet()){
        		paramsStr += "&" + param + "=" + params.get(param);
        	}
        	if(!paramsStr.isEmpty()){
        		paramsStr = paramsStr.substring(1);
        		urlStr += "?" + paramsStr;
        	}
			URL url = new URL(urlStr);
			HttpURLConnection httpCon = (HttpURLConnection) url
					.openConnection();
			httpCon.setRequestMethod("GET");
			is = httpCon.getInputStream();
 
			reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
			StringBuilder sb = new StringBuilder();
			String line = null;
			while ((line = reader.readLine()) != null) {   
                sb.append(line);   
            }
			resultStr = sb.toString();
		 
		} catch (Exception e) {
			e.printStackTrace();
			 
		} finally {
			try {
				if(reader!=null)reader.close();
				if(is!=null)is.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return resultStr;
	}
	
	/**
	 * http post请求方式
	 * @param urlStr
	 * @param params
	 *
	**/
	public static String post(String urlStr,Map<String,String> params){
		 URL connect;
		 StringBuffer data = new StringBuffer();  
         try {  
             connect = new URL(urlStr);  
             HttpURLConnection connection = (HttpURLConnection)connect.openConnection();  
             connection.setRequestMethod("POST");  
             connection.setDoOutput(true); 
             connection.setDoInput(true);
             connection.setRequestProperty("accept", "*/*");
             connection.setRequestProperty("connection", "Keep-Alive");
             connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
           //conn.setRequestProperty("Cookie", cookiesAll.toString()); 设置cookie  若需要登录操作
             OutputStreamWriter paramout = new OutputStreamWriter(  
                     connection.getOutputStream(),"UTF-8"); 
         	String paramsStr = "";
        	for(String param : params.keySet()){
        		paramsStr += "&" + param + "=" + params.get(param);
        	}
        	if(!paramsStr.isEmpty()){
        		paramsStr = paramsStr.substring(1);
        	}
             paramout.write(paramsStr);  
             paramout.flush();  
             BufferedReader reader = new BufferedReader(new InputStreamReader(  
                     connection.getInputStream(), "UTF-8"));  
             String line;              
             while ((line = reader.readLine()) != null) {          
                 data.append(line);            
             }  
           
             paramout.close();  
             reader.close();  
         } catch (Exception e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
         }  
        return data.toString();
	}
}

(2)测试调用方法

package com.dufy.http;

import java.util.HashMap;
import java.util.Map;

public class TestClient {

	/**
	 * @author dufy
	 * @description 测试Http的调用
	 * @creation 2017年1月12日  
	 * @QQ : 742981086 
	 */
	public static void main(String[] args){

		String url = "http://XXX";//url接口地址
  	    Map<String,String> params = new HashMap<String,String>();
  	    params.put("param1", "1");
  	    params.put("param2", "2");
  	    params.put("param3", "3");
        String resultPost = TestHttpRequest.post(url, params);//post请求方式
        String resultGet = TestHttpRequest.get(url, params);//get请求方式
        System.out.println(resultPost);
       
	}

}


通过以上的代码,正确的接口名和传递正确的参数,最后返回了想要的结果。。。。


如果在开发中进行Http的一些测试,那么也可以使用一些在线的Http调用模拟工具!


 

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

其中过程中参看了一下博客中的一些内容,谢谢这些大神们提供的资料!

java发送http的get、post请求
http://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.html
JAVA HttpURLConnection Post方式提交传递参数  
http://wang09si.blog.163.com/blog/static/1701718042013631104658130/


如果你遇到我上面的问题,没有得到解决,欢迎和你一起探讨探讨!

4
1
查看评论

ajax调用后台java类的例子

ajax,java
  • rznice
  • rznice
  • 2015-02-06 11:07
  • 26133

java 实现ajax发送http请求,直接访问服务器

//-----------------------------客户端请求时需要把中文转码 -----------------------------------------     /**       * 向指定URL发...
  • qq791007
  • qq791007
  • 2016-09-07 11:21
  • 6120

用java发送ajax请求实现刷票(干坏事^_^)

import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.co...
  • qq_34309305
  • qq_34309305
  • 2017-04-18 15:14
  • 1138

ajax跨域请求的三种方式(js+java)

1 : 采用jsonp (只支持get请求,后端返回的jsonp格式json,后端无需做请求放行操作) /* $.ajax({   type: "GET", // 此处只能是get请求 post请求后端即使修改(method = RequestMethod.PO...
  • u010039979
  • u010039979
  • 2016-11-28 15:11
  • 4188

jQuery的Ajax接收java返回数据

1.前端Ajax请求如下:$.ajax({ type : "post", //async:false, url : PATH + "/product/selectPicture.action", ...
  • qq_36637705
  • qq_36637705
  • 2017-05-03 14:03
  • 2020

java servlet 后台响应ajax请求

网页异步请求在各种网站、系统中可谓无处不在,本文就介绍一个最简单的从前端发送请求-->java后台连接数据库-->从数据库读取数据-->把数据返回前端-->前端接收请求的例子。 首先,在后台建立一个servlet:右键一个包,new-->servlet,输入类名,就可以...
  • u010867557
  • u010867557
  • 2017-07-05 19:32
  • 2426

纯js的ajax和Java后台交互

今天用了纯js代码写ajax和后台交互,写好了最开始没得问题,但是前端接收后台数据的时候遇到问题了。一直获取不到值,原来是我理解错了,获取后台的相关操作必须写到那个状态变化监听器里面。也就是需要写到onreadystatechange里面。最开始我一直以为获取后台的操作应该在发送请求(send)之后...
  • qq_25821067
  • qq_25821067
  • 2016-06-08 12:05
  • 18471

Java通过jQuery实现ajax异步请求

  • 2014-11-25 13:44
  • 44KB
  • 下载

JavaWeb开发$.ajax如何向后台传输数据

在Web开发中,前台和后台的数据交互是十分频繁的, 而JQuery对Ajax进行了封装,使得前台向后台发送数据变得十分简单。Ajax如何向后台传递数据
  • qq_30051139
  • qq_30051139
  • 2016-10-26 17:40
  • 6727

2、Ajax与Java通过POST方式交互

1、关于Ajax交互的步骤      1.1  获取到xmlhttprequest       1.2  设置xmlhttprequest的onreadystatechange响应事件 &...
  • zbw18297786698
  • zbw18297786698
  • 2016-05-06 13:03
  • 5912
    个人资料
    • 访问:465155次
    • 积分:5943
    • 等级:
    • 排名:第5100名
    • 原创:169篇
    • 转载:16篇
    • 译文:0篇
    • 评论:161条
    联系方式
    博客专栏
    最新评论