zoukankan      html  css  js  c++  java
  • java调用第三方接口(转载)

    在很多时候有些别人做过的东西直接拿来用就好了,例如:身份证的信息、某个地区的天气、电话归属地等等。

    代码

    //import com.alibaba.fastjson.JSONObject;
    import org.apache.commons.httpclient.*;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.params.HttpMethodParams;
    import org.json.JSONObject;
    
    import java.io.IOException;
    import java.util.Scanner;
    
    
    /**
     * @Author: Yang JianQiu
     * @Date: 2019/4/28 11:07
     *
     * HttpClient模拟get、post请求并发送请求参数(json等)
     * 【参考资料】
     * https://javasam.iteye.com/blog/2117845
     * https://blog.csdn.net/qq_28379809/article/details/82898792
     */
    public class HttpClientToInterface {
    
        /**
         * httpClient的get请求方式
         * 使用GetMethod来访问一个URL对应的网页实现步骤:
         * 1.生成一个HttpClient对象并设置相应的参数;
         * 2.生成一个GetMethod对象并设置响应的参数;
         * 3.用HttpClient生成的对象来执行GetMethod生成的Get方法;
         * 4.处理响应状态码;
         * 5.若响应正常,处理HTTP响应内容;
         * 6.释放连接。
         * @param url
         * @param charset
         * @return
         */
        public static String doGet(String url, String charset){
            /**
             * 1.生成HttpClient对象并设置参数
             */
            HttpClient httpClient = new HttpClient();
            //设置Http连接超时为5秒
            httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
    
            /**
             * 2.生成GetMethod对象并设置参数
             */
            GetMethod getMethod = new GetMethod(url);
            //设置get请求超时为5秒
            getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
            //设置请求重试处理,用的是默认的重试处理:请求三次
            getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
    
            String response = "";
    
            /**
             * 3.执行HTTP GET 请求
             */
            try {
                int statusCode = httpClient.executeMethod(getMethod);
    
                /**
                 * 4.判断访问的状态码
                 */
                if (statusCode != HttpStatus.SC_OK){
                    System.err.println("请求出错:" + getMethod.getStatusLine());
                }
    
                /**
                 * 5.处理HTTP响应内容
                 */
                //HTTP响应头部信息,这里简单打印
                Header[] headers = getMethod.getResponseHeaders();
                for (Header h: headers){
                    System.out.println(h.getName() + "---------------" + h.getValue());
                }
                //读取HTTP响应内容,这里简单打印网页内容
                //读取为字节数组
                byte[] responseBody = getMethod.getResponseBody();
                response = new String(responseBody, charset);
                System.out.println("-----------response:" + response);
                //读取为InputStream,在网页内容数据量大时候推荐使用
                //InputStream response = getMethod.getResponseBodyAsStream();
    
            } catch (HttpException e) {
                //发生致命的异常,可能是协议不对或者返回的内容有问题
                System.out.println("请检查输入的URL!");
                e.printStackTrace();
            } catch (IOException e){
                //发生网络异常
                System.out.println("发生网络异常!");
            }finally {
                /**
                 * 6.释放连接
                 */
                getMethod.releaseConnection();
            }
            return response;
        }
    
        /**
         * post请求
         * @param url
         * @param json
         * @return
         */
        public static String doPost(String url, JSONObject json){
            HttpClient httpClient = new HttpClient();
            PostMethod postMethod = new PostMethod(url);
    
            postMethod.addRequestHeader("accept", "*/*");
            postMethod.addRequestHeader("connection", "Keep-Alive");
            //设置json格式传送
            postMethod.addRequestHeader("Content-Type", "application/json;charset=utf-8");
            //必须设置下面这个Header
            postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
            //添加请求参数
           // postMethod.addParameter("tel", json.getString("tel"));
    
            String res = "";
            try {
                int code = httpClient.executeMethod(postMethod);
                if (code == 200){
                    res = postMethod.getResponseBodyAsString();
                    int l = res.indexOf("{");
                    res = res.substring(l);
                    System.out.println(res);
                    //字符串res转为Json对象
                    JSONObject test = new JSONObject(res);
                    //提取手机运营商
                    System.out.println(test.getString("catName"));
                    //System.out.println(res);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return res;
        }
    
        public static void main(String[] args) {
            doGet("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", "GBK");
            System.out.println("-----------分割线------------");
            System.out.println("-----------分割线------------");
            System.out.println("-----------分割线------------");
    
            JSONObject jsonObject = new JSONObject();
            Scanner in = new Scanner(System.in);
            //jsonObject.put("tel", "18220568364");
            System.out.print("请输入电话:");
            String input = in.next();
            doPost("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel="+input, jsonObject);
            //查身份证的居住地、性别等
            //doPost("https://api.jisuapi.com/idcard/query?appkey=你申请的appkey",jsonObject);
        }
    }
    

    Pom.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.zyb</groupId>
        <artifactId>call_Interface</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.1</version>
            </dependency>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20180813</version>
            </dependency>
        </dependencies>
    
    
    </project>
    

    效果图:

    原文地址:https://www.cnblogs.com/swordfall/p/10757499.html

    不一样的烟火
  • 相关阅读:
    Python range 函数 Python零基础入门教程
    Python eval 与 exec 函数的区别 Python零基础入门教程
    Python callable 函数 Python零基础入门教程
    Python bytes 函数 Python零基础入门教程
    Python ord 函数 Python零基础入门教程
    Python len函数 Python零基础入门教程
    第十二课 通过URL api拿到接送数据并做页面展示
    第十三课 axios请求数据
    网络编程学习路线计划
    erlang学习笔记本【不断更新】
  • 原文地址:https://www.cnblogs.com/cstdio1/p/12341346.html
Copyright © 2011-2022 走看看