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/

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 电商网站的商品详情页系统架构

    电商网站的商品详情页系统架构电商网站的商品详情页系统架构1小型电商架构:小型电商网站的页面展示采用页面全量静态化的思想。数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面推入Nginx服务器。用户浏览网站页面时,取用一个已经静态化好的html页面,例如freemarker,thymeleaf等,直接返回回去,不涉及任何的业务逻辑处理。例如下面一个简单的魔板…

  • vue的$on方法_vue基本指令

    vue的$on方法_vue基本指令v-on监听事件可以用v-on指令监听DOM事件,并在触发时运行一些JavaScript代码。事件代码可以直接放到v-on后面,也可以写成一个函数。示例代码如下:<divid

  • android微信怎么建群,微信怎么建群?微信怎么建群当群主?

    android微信怎么建群,微信怎么建群?微信怎么建群当群主?【科技讯】5月12日消息,微信怎么建群,微信怎么建群当群主?微信怎么建群聊,微信建群第一次多少人?想必这些问题,已经开始成为大家在日常使用微信时经常会遇到的一个问题,今天,科技讯小编就亲自上手,为大家一一解答这些问题。微信已然成为大家日常进行社交的第一工具,虽然同属腾讯旗下产品,但是微信与QQ显然有着明显的用户群体区分,qq仍然活跃着大量的95后甚至00后的年轻人,而在他们看来,微信则是“大人”们…

  • furture_南京future

    furture_南京future我想,还是不知道未来比较好!揭开神秘的同时也扼杀了希望,所谓预测未来就是创造那个未来,意味着我们放弃了主宰未来的权利!

  • c语言定时器实验程序,C语言定时器实验.doc[通俗易懂]

    c语言定时器实验程序,C语言定时器实验.doc[通俗易懂]C语言定时器实验实验三C语言定时器实验一、实验目的1.进一步熟悉DSP的中断机制2.在掌握中断服务程序编写的基础上进一步熟悉定时器的运用3.进一步掌握如何编写DSP中断服务子程序二、实验设备1.具有USB接口的PC机一台2.USB仿真器一台3.ARM/DSP/FPGA实验箱一台三、实验原理本实验是在我们基本上掌握DSP中断机制的基础上,进一步学习如何在DSP内部实现定时器的正确操作以及定时器中…

  • 浅谈 JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣。

    浅谈 JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣。微信搜索程序员的起飞之路可以加我公众号,保证一有干货就更新~本人的几点浅见,各位大大不喜勿喷。先说下这俩到底是干啥的吧。其实这俩干的活儿都一样,就是创建了一个对象然后去通过对象调用executeQuery方法来执行sql语句。说是CreateStatement和PrepareStatement的区别,但其实说的就是Statement和PrepareStatement的区别,相信大家在网上已经看到过不少这方面的资料和博客,我在此处提几点,大家看到过的,就当重记忆,没看到就当补充~下面开始谈谈他.

发表回复

您的电子邮箱地址不会被公开。

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