1.首先申請企查查賬號和20次免費測試
2.可以下載企查查提供的demo
這里記錄一下我自己的項目
pom.xml
<dependencies> <!--Hutool是一個小而全的Java工具類庫--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.1</version> </dependency> <!-- httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.1</version> </dependency> </dependencies>
HttpHelper
package org.ld.httpGetDemo; import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.EntityUtils; /** * 描述 http請求處理模塊 */ public class HttpHelper { // get 請求 public static String httpGet(String url, Header[] headers) throws Exception { HttpUriRequest uriRequest = new HttpGet(url); if (null != headers) uriRequest.setHeaders(headers); CloseableHttpClient httpClient = null; try { httpClient = declareHttpClientSSL(url); CloseableHttpResponse httpresponse = httpClient.execute(uriRequest); HttpEntity httpEntity = httpresponse.getEntity(); String result = EntityUtils.toString(httpEntity, REQ_ENCODEING_UTF8); return result; } catch (ClientProtocolException e) { System.out.println(String.format("http請求失敗,uri{%s},exception{%s}", new Object[] { url, e })); } catch (IOException e) { System.out.println(String.format("IO Exception,uri{%s},exception{%s}", new Object[] { url, e })); } finally { if (null != httpClient) httpClient.close(); } return null; } // post 請求 public static String httpPost(String url, String params) throws Exception { HttpPost post = new HttpPost(url); post.addHeader("Content-Type", "application/json;charset=" + REQ_ENCODEING_UTF8); // 設置傳輸編碼格式 StringEntity stringEntity = new StringEntity(params, REQ_ENCODEING_UTF8); stringEntity.setContentEncoding(REQ_ENCODEING_UTF8); post.setEntity(stringEntity); HttpResponse httpresponse = null; CloseableHttpClient httpClient = null; try { httpClient = declareHttpClientSSL(url); httpresponse = httpClient.execute(post); HttpEntity httpEntity = httpresponse.getEntity(); String result = EntityUtils.toString(httpEntity, REQ_ENCODEING_UTF8); return result; } catch (ClientProtocolException e) { System.out.println(String.format("http請求失敗,uri{%s},exception{%s}", new Object[] { url, e })); } catch (IOException e) { System.out.println(String.format("IO Exception,uri{%s},exception{%s}", new Object[] { url, e })); } finally { if (null != httpClient) httpClient.close(); } return null; } private static CloseableHttpClient declareHttpClientSSL(String url) { if (url.startsWith("https://")) { return sslClient(); } else { return HttpClientBuilder.create().setConnectionManager(httpClientConnectionManager).build(); } } /** * 設置SSL請求處理 */ private static CloseableHttpClient sslClient() { try { SSLContext ctx = SSLContext.getInstance("TLS"); X509TrustManager tm = new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] xcs, String str) { } public void checkServerTrusted(X509Certificate[] xcs, String str) { } }; ctx.init(null, new TrustManager[] { tm }, null); SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory(); return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (KeyManagementException e) { throw new RuntimeException(e); } } // this is config private static final String REQ_ENCODEING_UTF8 = "utf-8"; private static PoolingHttpClientConnectionManager httpClientConnectionManager; public HttpHelper() { httpClientConnectionManager = new PoolingHttpClientConnectionManager(); httpClientConnectionManager.setMaxTotal(100); httpClientConnectionManager.setDefaultMaxPerRoute(20); } // get 請求 public static String httpGet(String url) throws Exception { return httpGet(url, null); } }
測試類
package org.ld.httpGetDemo; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.bejson.pojo.JsonRootBean; import org.apache.commons.codec.digest.DigestUtils; import org.apache.http.client.methods.HttpHead; /** * @author 陸賽賽 * 企查查API測試 * 測試結果: *1.keyword必填,可以是公司名、注冊號或社會統一信用代碼 * 2.pageIndex頁碼,默認第一頁 * 3.pageSize每頁條數,默認為10,最大不超過20條 * 4.keyword不能用城市名,會顯示傳入參數有誤,請檢查 * 5.一般數據量較大,常以千/萬條為單位,分頁查找較為麻煩 * 6.若要精確查找,需要填注冊號或社會統一信用代碼 */ public class MainApp { // 查看我的秘鑰 我的Key private static final String appkey = "e003ad0571ec4623bde67753d81a6267"; private static final String seckey = "46432E9F056594D6DC10A712205FC2C3"; //公司名、注冊號或社會統一信用代碼 private static String keyword="恆信"; private static Integer pageIndex=null;//頁碼,默認第一頁 private static Integer pageSize=null;//每頁條數,默認為10,最大不超過20條 public static void main(String[] args) throws Exception { String jsonStr = createUrlForQiChaCha(keyword, pageIndex, pageSize); //1.使用工具類轉換為JSONObject JSONObject jsonObject = JSONUtil.parseObj(jsonStr); //2.JSONObject對象轉換為JavaBean JsonRootBean jsonRootBean = JSONUtil.toBean(jsonObject, JsonRootBean.class); System.out.println(jsonRootBean); } // 請求頭配置 public static final String[] RandomAuthentHeader() { String timeSpan = String.valueOf(System.currentTimeMillis() / 1000); String[] authentHeaders = new String[] { DigestUtils.md5Hex(appkey.concat(timeSpan).concat(seckey)).toUpperCase(), timeSpan }; return authentHeaders; } //發送http請求,返回企查查開放接口的json字符串 public static String createUrlForQiChaCha(String keyword,Integer pageIndex,Integer pageSize) throws Exception { //默認 String reqInterNme = "http://api.qichacha.com/ECIV4/Search"; String paramStr = "keyword="+keyword; //請求頭配置 HttpHead reqHeader = new HttpHead(); String[] autherHeader = RandomAuthentHeader(); reqHeader.setHeader("Token", autherHeader[0]); reqHeader.setHeader("Timespan", autherHeader[1]); //配置url String reqUri = reqInterNme.concat("?key=").concat(appkey).concat("&").concat(paramStr); //如果配置了頁碼和每頁條數,url后加上下列參數 if(pageIndex!=null && pageSize!=null){ reqUri=reqUri+"&pageIndex="+pageIndex+"&pageSize="+pageSize; } //Get請求訪問企查查開放接口 String tokenJson = HttpHelper.httpGet(reqUri, reqHeader.getAllHeaders()); return tokenJson; } }
api返回值封裝成Javabean
package com.bejson.pojo; import java.util.List; public class JsonRootBean { private Paging Paging;//頁碼相關對象 private List<Result> Result;//返回數據 /* 101當前的KEY無效或者還未生效中 102當前KEY已欠費 103當前Key被暫停使用 104接口正在維護中 105接口已下線停用 107被禁止的IP或者簽名錯誤 108請求格式錯誤,請重試 109請求超過系統限制 110當前相同查詢連續出錯,請等2小時后重試 111接口權限未開通 112您的賬號剩余使用量已不足 113當前接口已被刪除,請重新申請 114當前接口已被禁用,請聯系管理員 115身份驗證錯誤或者已過期 199系統未知錯誤,請聯系技術客服 200查詢成功 201查詢無結果 202查詢參數錯誤,請檢查 203系統查詢有異常,請聯系技術人員 204請至少輸入一個參數 205等待處理中 206無效的省份代碼 207請求數據的條目數超過上限(5000) 208此接口不支持此公司類型查詢 213參數長度不能小於2 214您還未購買過該接口,請先購買 215不支持的查詢關鍵字 216國家代碼不正確 221發票校驗失敗(參數與發票號碼不對應) 222超過發票當日查驗次數,請次日再試 299無效的請求 */ private String Status;//返回碼 private String Message;//返回信息 private String OrderNumber;//訂單號 public void setPaging(Paging Paging) { this.Paging = Paging; } public Paging getPaging() { return Paging; } public void setResult(List<Result> Result) { this.Result = Result; } public List<Result> getResult() { return Result; } public void setStatus(String Status) { this.Status = Status; } public String getStatus() { return Status; } public void setMessage(String Message) { this.Message = Message; } public String getMessage() { return Message; } public void setOrderNumber(String OrderNumber) { this.OrderNumber = OrderNumber; } public String getOrderNumber() { return OrderNumber; } @Override public String toString() { return "JsonRootBean{" + "Paging=" + Paging + ", Result=" + Result + ", Status='" + Status + '\'' + ", Message='" + Message + '\'' + ", OrderNumber='" + OrderNumber + '\'' + '}'; } }
package com.bejson.pojo; public class Paging { private int PageSize;//每頁顯示條數,默認為10,最多20 private int PageIndex;//頁數,默認為1 private int TotalRecords;//總數量 public void setPageSize(int PageSize) { this.PageSize = PageSize; } public int getPageSize() { return PageSize; } public void setPageIndex(int PageIndex) { this.PageIndex = PageIndex; } public int getPageIndex() { return PageIndex; } public void setTotalRecords(int TotalRecords) { this.TotalRecords = TotalRecords; } public int getTotalRecords() { return TotalRecords; } @Override public String toString() { return "Paging{" + "PageSize=" + PageSize + ", PageIndex=" + PageIndex + ", TotalRecords=" + TotalRecords + '}'; } }
package com.bejson.pojo; import java.util.Date; public class Result { private String KeyNo;//內部KeyNo private String Name;//公司名稱 private String OperName;//法人名稱 private Date StartDate;//成立日期 private String Status;//企業狀態 private String No;//注冊號 private String CreditCode;//社會統一信用代碼 public void setKeyNo(String KeyNo) { this.KeyNo = KeyNo; } public String getKeyNo() { return KeyNo; } public void setName(String Name) { this.Name = Name; } public String getName() { return Name; } public void setOperName(String OperName) { this.OperName = OperName; } public String getOperName() { return OperName; } public void setStartDate(Date StartDate) { this.StartDate = StartDate; } public Date getStartDate() { return StartDate; } public void setStatus(String Status) { this.Status = Status; } public String getStatus() { return Status; } public void setNo(String No) { this.No = No; } public String getNo() { return No; } public void setCreditCode(String CreditCode) { this.CreditCode = CreditCode; } public String getCreditCode() { return CreditCode; } @Override public String toString() { return "Result{" + "KeyNo='" + KeyNo + '\'' + ", Name='" + Name + '\'' + ", OperName='" + OperName + '\'' + ", StartDate=" + StartDate + ", Status='" + Status + '\'' + ", No='" + No + '\'' + ", CreditCode='" + CreditCode + '\'' + '}'; } }
執行main方法就可以了