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

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

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

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

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

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

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

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

    1.接口信息

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

    方式:post

    参数:mobile (手机号)….

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

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

①: 我前台用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/

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java数组截取[通俗易懂]

    java数组截取[通俗易懂]JAVA数组截取publicclassDay12_2{publicstaticvoidmain(String[]args){int[]A=newint[]{1,3,5,7,9};intstart=1;intend=3;arraySub(A,start,end);}public…

    2022年6月11日
    29
  • 真正解决Jenkins安装插件总是报错的问题(网上查的解决方案都无效)

    真正解决Jenkins安装插件总是报错的问题(网上查的解决方案都无效)

    2021年8月31日
    41
  • java输出日期格式_java时区转换

    java输出日期格式_java时区转换importorg.joda.time.DateTime;importjava.util.Date;publicvoidsetCreatedDate(DatecreatedDate){this.createdDate=createdDate;}publicvoidsetCreatedDate(finalDateTimecreatedDate){this.createdDa…

    2022年10月24日
    0
  • 序列化和反序列化实现

    1.什么是序列化?程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入文件或是将其传输到网络中的另一台计算机上以实现通讯。这个将程序数据转换成能被存储并传输的格式的过程被称

    2021年12月28日
    40
  • C语言结构体指针_C语言函数返回结构体指针

    C语言结构体指针_C语言函数返回结构体指针文章目录结构体概述结构体指针结构体概述问题定义:有时需要将不同类型的数据组合成一个有机的整体,以便于使用,就类似于sql中的存储一样,随着语言层次的增高封装性是越来越大的。如:intnum;charname[20];charsex;intage;charaddr[30];定义结构的一般形式为:struct结构名{成员列表};成员列表由若干个成员构成,每个成员…

    2022年10月23日
    0
  • android toast位置_android studio toast不显示

    android toast位置_android studio toast不显示关键词:Android,Appium,Python,Toast1、什么是toast?toast是一个浮动的显示块,在Android中主要用于提示信息,超时后退出,常用于提示一些不是那么重要的信息;如果是重要的信息,会使用notification。toast比较难定位,一来因为它时间很短,一般3秒左右;二来toast元素一般不写在XML中,代码中直接去调用。Toast.makeText(getApp…

    2022年9月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号