1. 程式人生 > >微信域名檢測接口實現的原理

微信域名檢測接口實現的原理

handle 參考 def puts line direct .net 負載 stringbu

隨著微信域名檢測的普及,越來越多的人重視這方面有個客戶是這樣跟我說的,他現在用的那個檢測有頻率限制 最快只能一秒檢測一個, 並發多的時候是不能邊跳轉邊檢測的, 只能寫到計劃任務裏面,像他這樣的情況,做的檢測效果並不明顯,有時候所有域名一下被封,可見反應速度直接影響到你後面防封的效果。這就是個人單獨研發的接口,只能提供1s每次的服務,對於量少的客戶還可以,但是只要量大的話這樣的反應速度是遠遠不夠的,速度越快對服務器的要求越高,因為反應速度越快服務器的負載越大。
技術分享圖片

我們猴子數據有專門的微信域名檢測,最快反應速度可以達到2ms,甚至可以支持不限頻率,當然這對服務器的要求更高,而且我們采用了官方協議檢測,並且備用第三方協議檢測。猴子數據是以公司為依托,有著專業的技術團隊,最快反應速度可以達到2ms每次,不限域名,不限頻率,不限並發,進行實時檢測結果,並及時解決問題。

下面分享一段微信域名檢測api接口代碼供大家參考:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;

public class Demo {
  public static final String DEF_CHATSET = "UTF-8";
  public static final int DEF_CONN_TIMEOUT = 30000;
  public static final int DEF_READ_TIMEOUT = 30000;
  public static String userAgent =  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";

  public static void mobileQuery(){
      String result =null;
      String url ="http://api.monkeyapi.com";//請求接口地址
      Map params = new HashMap();//請求參數
        params.put("appkey" , "appkey");//您申請的APPKEY
        params.put("url" , "www.url.com");//需要查詢的網站
      try {
          result = net(url, params, "GET");
          JSONObject object = JSONObject.fromObject(result);
          if(object.getInt("error_code")==0){
            System.out.println(object.get("result"));
          }else{
            System.out.println(object.get("error_code")+":"+object.get("reason"));
          }
      } catch (Exception e) {
        e.printStackTrace();
      }
  }

  public static void main(String[] args) {

  }

  /**
   *
   * @param  strUrl 請求地址
   * @param  params 請求參數
   * @param  method 請求方法
   * @return    網絡請求字符串
   * @throws  Exception
   */
  public static String net(String strUrl, Map params,String method) throws Exception {
     HttpURLConnection conn = null;
     BufferedReader reader = null;
     String rs = null;
     try {
        StringBuffer sb = new StringBuffer();
        if(method==null || method.equals("GET")){
          strUrl = strUrl+"?"+urlencode(params);
        }
        URL url = new URL(strUrl);
        conn = (HttpURLConnection) url.openConnection();
        if(method==null || method.equals("GET")){
           conn.setRequestMethod("GET");
        }else{
           conn.setRequestMethod("POST");
           conn.setDoOutput(true);
        }
        conn.setRequestProperty("User-agent", userAgent);
        conn.setUseCaches(false);
        conn.setConnectTimeout(DEF_CONN_TIMEOUT);
        conn.setReadTimeout(DEF_READ_TIMEOUT);
        conn.setInstanceFollowRedirects(false);
        conn.connect();
        if (params!= null && method.equals("POST")) {
           try {
              DataOutputStream out = new DataOutputStream(conn.getOutputStream());
              out.writeBytes(urlencode(params));
           } catch (Exception e) {
              // TODO: handle exception
              e.printStackTrace();
           }
        }
       InputStream is = conn.getInputStream();
       reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
       String strRead = null;
       while ((strRead = reader.readLine()) != null) {
         sb.append(strRead);
       }
       rs = sb.toString();
     } catch (IOException e) {
       e.printStackTrace();
     } finally {
       if (reader != null) {
          reader.close();
       }
       if (conn != null) {
          conn.disconnect();
       }
     }
    return rs;
  }

  //將map型轉為請求參數型
  public static String urlencode(Map<String,String> data) {
       StringBuilder sb = new StringBuilder();
       for (Map.Entry i : data.entrySet()) {
           try {
              sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
           } catch (UnsupportedEncodingException e) {
              e.printStackTrace();
           }
       }
       return sb.toString();
  }

}

微信域名檢測接口實現的原理