前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 通过Ajax前台传参数 并用 HttpURLConnection Post方式访问对外的接口

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

作者头像
全栈程序员站长
发布2022-07-19 14:29:42
6620
发布2022-07-19 14:29:42
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

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

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

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

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

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

1.接口信息

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

方式:post

参数:mobile (手机号)….

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

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

相关的代码:

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
$(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传递

代码语言:javascript
复制
@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)工具类

代码语言:javascript
复制
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)");
代码语言:javascript
复制
           //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)测试调用方法

代码语言:javascript
复制
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/

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/121291.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档