监测第三方接口的应答状态

监测第三方接口的应答状态

有时候第三方接口不可访问,比如返回502(服务宕了),403(拒绝访问),导致程序报错.
经常是用户访问不了,或界面报错,
然后开发同学吭哧吭哧地排查,结果发现是协作方接口的问题,费力不讨好.
为了检查第三方接口的可用性,我写了一个接口,如下:

package com.girltest.web.controller;

import com.common.util.SystemHWUtil;
import com.io.hw.json.HWJacksonUtils;
import com.string.widget.util.ValueWidget;
import com.string.widget.util.XSSUtil;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by 黄威 on 4/8/16.<br >
 */
@Controller
@RequestMapping("/testapi")
public class TestThirdApiController {
    protected static Logger logger = Logger.getLogger(TestThirdApiController.class);

    /***
     * 用于测试协作方接口是否可以访问,比如403 表示拒绝访问<br>
     * 注意:若上线,则该接口需要鉴权
     *
     * @param apiPath
     * @param requestMethod
     * @return :<br>
     * {
     * apiPath: "http://i.chanjet.com/user/userAndAppInfo",
     * apiPath url encoded: "http%3A%2F%2Fi.chanjet.com%2Fuser%2FuserAndAppInfo",
     * responseCode: 401
     * }
     * @throws IOException
     */
    @RequestMapping(value = "/testapi", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF)
    @ResponseBody
    public String test(String apiPath, String requestMethod) throws IOException {
        apiPath = XSSUtil.deleteXSS(apiPath);
        if (ValueWidget.isNullOrEmpty(apiPath)) {
            logger.error("apiPath is null");
            return null;
        }
        if (!apiPath.startsWith("http")) {//例如:apiPath的值为:i.chanjet.com%2Fuser%2FuserAndAppInfo
            //自动在前面补充http://
            apiPath = "http://" + apiPath;
        }
        URL url = new URL(apiPath);
        URLConnection urlConnection = url.openConnection();
        HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConnection;
        httpUrlConnection.setDoInput(true);
        httpUrlConnection.setUseCaches(false);
        if (!ValueWidget.isNullOrEmpty(requestMethod)) {
            httpUrlConnection.setRequestMethod(requestMethod);
        }
        int responseStatusCode = SystemHWUtil.NEGATIVE_ONE;//-1
        try {
            httpUrlConnection.connect();
            responseStatusCode = httpUrlConnection.getResponseCode();
        } catch (java.net.UnknownHostException ex) {
            ex.printStackTrace();
        }

        httpUrlConnection.disconnect();
        logger.info("responseStatusCode:" + responseStatusCode);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("responseCode", responseStatusCode);
        map.put("apiPath", apiPath);
        map.put("apiPath url encoded", URLEncoder.encode(apiPath, SystemHWUtil.CHARSET_UTF));
        return HWJacksonUtils.getJsonP(map);//序列化
    }
}

测试:

时间: 2024-09-09 19:05:43

监测第三方接口的应答状态的相关文章

七、HTTP应答状态

    7.1 状态代码概述   Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档.下面是一个最简单的应答: HTTP/1.1 200 OKContent-Type: text/plain Hello World 状态行包含HTTP版本.状态代码.与状态代码对应的简短说明信息.在大多数情况下,除了Content-Type之外的所有应答头都是可选的.但Content-Type是必需的,它描述的是后面文档的MIME类型.虽然大多数

jsp Servlet基础入门学习:HTTP应答状态

js|servlet     7.1 状态代码概述   Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档.下面是一个最简单的应答: HTTP/1.1 200 OKContent-Type: text/plain Hello World 状态行包含HTTP版本.状态代码.与状态代码对应的简短说明信息.在大多数情况下,除了Content-Type之外的所有应答头都是可选的.但Content-Type是必需的,它描述的是后面文档的M

JSP HTTP应答状态

js   7.1 状态代码概述 Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档.下面是一个最简单的应答: HTTP/1.1 200 OK Content-Type: text/plain Hello World 状态行包含HTTP版本.状态代码.与状态代码对应的简短说明信息.在大多数情况下,除了Content-Type之外的所有应答头都是可选的.但Content-Type是必需的,它描述的是后面文档的MIME类型.虽然大多数

HTTP应答状态

Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档.下面是一个最简单的应答: HTTP/1.1 200 OK Content-Type: text/plain Hello World 状态行包含HTTP版本.状态代码.与状态代码对应的简短说明信息.在大多数情况下,除了Content-Type之外的所有应答头都是可选的.但Content-Type是必需的,它描述的是后面文档的MIME类型.虽然大多数应答都包含一个文档,但也有一些不

腾讯低调推出微信公众平台第三方接口平台风铃

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 [最科技讯]最近,腾讯低调推出微信公众平台第三方接口平台风铃,除自定义菜单外,还有其他众多微信接口高级权限:一键生成HTML4和WAP站,留言.报名.抽奖等组件,集成QQ客服,打通微信与微博等. 腾讯风铃的最大卖点就是通过各种模块的选择快速的生成属于企业或者个人自己的微信APP,随着微信5.0的到来,服务号每月只能推送一条后,企业将只能通过微网站的方式来配合自定义回复接口为用户提供服务,图中可以看出风铃提供了16种不同功能的模块,包括抽奖.

快递查询接口(不要通过第三方接口)

问题描述 快递查询接口(不要通过第三方接口) 快递公司是否有提供对外的快递查询接口,怎样才能使用?不要通过第三方接口(如快递100,爱快递......都不是我想要的). 解决方案 快递物流第三方接口OpenJWeb网上商城快递查询第三方接口的实现webservice 第三方接口

第三方开源Android TickPlusDrawable状态可以通过动画切换的按钮_Android

先给大家展示下效果图,对第三方开源 android tickplusdrawable相关知识感兴趣的朋友一起学习吧. Android tickplusdrawable(TickPlusDrawable)是一个状态可以通过动画切换的按钮,Android tickplusdrawable(TickPlusDrawable)在github上的项目主页是:https://github.com/flavienlaurent/tickplusdrawable 测试代码: 布局: <FrameLayout x

微信公众平台开发(72)第三方接口

微信公众平台开发 第三方接口作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/weixin72-third-party-api.html   测试代码 <?php /* 方倍工作室 第三方接口 测试代码 */ $post = "<xml><ToUserName><![CDATA[gh_204936aea56d]]></ToUserName> <FromUserName><![CDATA

通过第三方接口发送短信验证码/短信通知(推荐)_java

需求:将首次交付密码为公共默认密码的方式改为点击入职功能,用短信方式发送系统自动生成的八位含数字.大小写字母和特殊符号生成的密码.短信发送服务由云通信http://www.yuntongxun.com/提供. 随机密码生成方法: /** * 生成随即密码 * @author chao.gao * @param pwd_len 生成的密码的总长度 * @return 密码的字符串 */ public static String genRandomNum(int pwd_len) { // Stri