java调用第三方接口简单示例

示例一 使用HttpURLConnection调用某图片文字识别接口

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import com.hcycom.ctginms.config.GlobalConfig;

import lombok.extern.slf4j.Slf4j;
@Slf4j
public class OCRRestAPI {
	//private static Log logger = LogFactory.getLog(this.getClass());
	public static String  getText(String filePath) throws Exception {
		//private static Logger logger = Logger.getLogger(OCRRestAPI.class);	
		String result = "";
		String license_code = GlobalConfig.LICENSE_CODE;
		String user_name = GlobalConfig.OCR_USER_NAME;
		String ocrURL = "http://www.ocrwebservice.com/restservices/processDocument?gettext=true&newline=1";
        byte[] fileContent = Files.readAllBytes(Paths.get(filePath));
		URL url = new URL(ocrURL);
		HttpURLConnection connection = (HttpURLConnection)url.openConnection();
		connection.setDoOutput(true);
		connection.setDoInput(true);
		connection.setRequestMethod("POST");
		connection.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString((user_name + ":" + license_code).getBytes()));
		connection.setRequestProperty("Content-Type", "application/json");
		connection.setRequestProperty("Content-Length", Integer.toString(fileContent.length));
		OutputStream stream = connection.getOutputStream();

		// Send POST request
		stream.write(fileContent);
		stream.close();
		int httpCode = connection.getResponseCode();
		System.out.println("HTTP Response code: " + httpCode);
		// Success request
		if (httpCode == HttpURLConnection.HTTP_OK)
		{
			String jsonResponse = GetResponseToString(connection.getInputStream());
			result = PrintOCRResponse(jsonResponse);
		}
		else if (httpCode == HttpURLConnection.HTTP_UNAUTHORIZED){
			 result="解析失败: Unauthorizied request";
			 log.error(result);
		}else{
			// Error occurred
			String jsonResponse = GetResponseToString(connection.getErrorStream());
		    JSONParser parser = new JSONParser();
		    JSONObject jsonObj = (JSONObject)parser.parse(jsonResponse);
		    result = "解析失败: " + jsonObj.get("ErrorMessage");
		    log.error(result);
		}
		connection.disconnect();
		
		return result;
	}
	private static String PrintOCRResponse(String jsonResponse) throws ParseException, IOException
	{
        // Parse JSON data
		String result = "";
	    JSONParser parser = new JSONParser();
	    JSONObject jsonObj = (JSONObject)parser.parse(jsonResponse);

	    // Get available pages
	    System.out.println("Available pages: " + jsonObj.get("AvailablePages"));
	    log.info("当前用户 剩余OCR接口剩余量:"+jsonObj.get("AvailablePages")+"用户名:"+GlobalConfig.OCR_USER_NAME);
	    if(jsonObj.get("AvailablePages").toString().equals("1")) {
	    	GlobalConfig.LICENSE_CODE = "4CFAF76";
	    	GlobalConfig.OCR_USER_NAME = "eeeeeeeee";
	    }
	    // get an array from the JSON object
	    JSONArray text= (JSONArray)jsonObj.get("OCRText");
        if(text.size()>0) {
        	JSONArray tempArray = (JSONArray) text.get(0);
        	if(tempArray.size()>0) {
        	   result = tempArray.get(0).toString();
        	   log.info(result);
        	    return result;
        	}
        	
        }
        return result;
        // For zonal OCR: OCRText[z][p]    z - zone, p - pages
//	    for(int i=0; i<text.size(); i++){
//	           System.out.println(" "+ text.get(i));
//	           
//	           System.err.println(text.get(i).toString().split(" \\n").toString());
//	           System.err.println(text.get(i).toString().split(" \\n").length);
//	    }

	    // Output file URL
	 
	}
	
	// Download converted output file from OCRWebService
	
	
	private static String GetResponseToString(InputStream inputStream) throws IOException
	{
		InputStreamReader responseStream  = new InputStreamReader(inputStream);
		
        BufferedReader br = new BufferedReader(responseStream);
        StringBuffer strBuff = new StringBuffer();
        String s;
        while ( ( s = br.readLine() ) != null ) {
            strBuff.append(s);
        }
		
        return strBuff.toString();
	}
}

示例二:使用HttpClient调用某第三方接口


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.hcycom.ctginms.config.GlobalConfig;
import com.hcycom.ctginms.dto.City;

public class IpipnetUtil2 {

	private static String Token = "b7524f";
	private static String IpipnetApi = "http://ipapi.ipip.net/find";

	//特殊地址 GOOGLE.COM 
	public static City  findCityByIp(String ip) throws Exception {	
		 if(!isIP(ip)) { //判断是否为ip
			   return null;
		   }
		 City city = null;
        HttpClient httpClient = new HttpClient();
        //设置Http连接超时为5秒
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
       
        GetMethod getMethod = new GetMethod(IpipnetApi+"?addr="+ip);
        //设置get请求超时为5秒
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
        //设置请求重试处理,用的是默认的重试处理:请求三次
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
        getMethod.addRequestHeader("Token", Token);
        String response = "";

        try {
            int statusCode = httpClient.executeMethod(getMethod);
            if (statusCode != HttpStatus.SC_OK){
                System.err.println("请求出错,错误原因:" + getMethod.getStatusLine());
            }
            BufferedReader reader = new BufferedReader(new InputStreamReader(getMethod.getResponseBodyAsStream()));
            StringBuffer stringBuffer = new StringBuffer();
            String str = "";
            while((str = reader.readLine())!=null){
            			stringBuffer.append(str);
            }
            response = stringBuffer.toString();
            if(StringUtils.isNotBlank(response)) {
            	System.out.println("响应的内容"+response);
            	JSONObject json = JSONObject.parseObject(response);
            	if("ok".equals(json.get("ret"))) {
            		JSONArray array = (JSONArray) json.get("data");
            		 System.out.println(array);
            		   if(array != null && array.size() >2) {
            			   city = new City();
            			   city.setCountry(array.getString(0));
            			   if("中国".equals(array.getString(1))||"局域网".equals(array.getString(1))
            					   ||"共享地址".equals(array.getString(1))||"GOOGLE.COM".equals(array.getString(1))
            					   ||"114DNS.COM".equals(array.getString(1))||"GOOGLE.COM 骨干网".equals(array.getString(1))||
            					   array.getString(0).equals(array.getString(1))) {
            				   city.setProvince("");
            			   }else {
            				   city.setProvince(array.getString(1));
            			   }
            			   city.setCity(array.getString(2));
            			 
            		   }
            	}
            }
        } catch (HttpException e) {
            System.out.println("请检查输入的URL!");
            e.printStackTrace();
        } catch (IOException e){
            System.out.println("发生网络异常!");
        }finally {
       
            getMethod.releaseConnection();
        }
        return city;
	}
	private static String GetResponseToString(InputStream inputStream) throws IOException
	{
		InputStreamReader responseStream  = new InputStreamReader(inputStream);
		
        BufferedReader br = new BufferedReader(responseStream);
        StringBuffer strBuff = new StringBuffer();
        String s;
        while ( ( s = br.readLine() ) != null ) {
            strBuff.append(s);
        }
		
        return strBuff.toString();
	}
	 /**
	    * 
	        * @discription 验证ip是否为字符串
	        * @author lijunjie            
	        * @created 2019年8月21日 上午9:55:15     
	        * @param str 待验证的字符串
	        * @return 如果是符合格式的字符串,返回true ,否则为false
	    */
	   public static boolean isIP(String str) {
		   String num = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)";
		   String regex = "^" + num + "\\." + num + "\\." + num + "\\." + num + "$";
		   return match(regex, str);
		   }
	   /**
	    * 
	        * @discription 在此输入一句话描述作用
	        * @author lijunjie            
	        * @created 2019年8月21日 上午9:54:27     
	        * @param regex 正则表达式字符串
	        * @param str 要匹配的字符串
	        * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
	    */
	   private static boolean match(String regex, String str) {
		   Pattern pattern = Pattern.compile(regex);
		   Matcher matcher = pattern.matcher(str);
		   return matcher.matches();
		   }
	   

}

示例三:使用curl 调用某第三方接口(使用httpclient调用接口返回403,但是curl 可以调通)


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hcycom.ctginms.dto.City;

public class IpipnetUtils {
	private static String Token = "be97e92a90e4f";
	private static String IpipnetApi = "http://ipapi.ipip.net/find";
	

	//特殊地址 GOOGLE.COM 
	public static City  findCityByIp(String ip) throws Exception {	
		 if(!isIP(ip)) { //判断是否为ip
			   return null;
		   }
		 City city = null;
		 String response = "";
		 String[] cmds = {"curl", IpipnetApi+"?addr="+ip,  "-H", "Token: "+Token};
		try {
			response = execCurl(cmds);
	     if(StringUtils.isNotBlank(response)) {
	        	System.out.println("响应的内容"+response);
	        	JSONObject json = JSONObject.parseObject(response);
	        	if("ok".equals(json.get("ret"))) {
	        		JSONArray array = (JSONArray) json.get("data");
	        		   if(array != null && array.size() >2) {
	        			   city = new City();
	        			   city.setCountry(array.getString(0));
	        			   if("中国".equals(array.getString(1))||"局域网".equals(array.getString(1))
	        					   ||"共享地址".equals(array.getString(1))||"GOOGLE.COM".equals(array.getString(1))
	        					   ||"114DNS.COM".equals(array.getString(1))||"GOOGLE.COM 骨干网".equals(array.getString(1))||
	        					   array.getString(0).equals(array.getString(1))) {
	        				   city.setProvince("");
	        			   }else {
	        				   city.setProvince(array.getString(1));
	        			   }
	        			   city.setCity(array.getString(2));
	        			 
	        		   }
	        	}else {
	        		System.out.println("请求失败失败原因:"+json.get("msg"));
	        	}
	        }
		
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
        return city;
	}
	private static String GetResponseToString(InputStream inputStream) throws IOException
	{
		InputStreamReader responseStream  = new InputStreamReader(inputStream);
		
        BufferedReader br = new BufferedReader(responseStream);
        StringBuffer strBuff = new StringBuffer();
        String s;
        while ( ( s = br.readLine() ) != null ) {
            strBuff.append(s);
        }
		
        return strBuff.toString();
	}
	 /**
	    * 
	        * @discription 验证ip是否为字符串
	        * @author lijunjie            
	        * @created 2019年8月21日 上午9:55:15     
	        * @param str 待验证的字符串
	        * @return 如果是符合格式的字符串,返回true ,否则为false
	    */
	   public static boolean isIP(String str) {
		   String num = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)";
		   String regex = "^" + num + "\\." + num + "\\." + num + "\\." + num + "$";
		   return match(regex, str);
		   }
	   /**
	    * 
	        * @discription 在此输入一句话描述作用
	        * @author lijunjie            
	        * @created 2019年8月21日 上午9:54:27     
	        * @param regex 正则表达式字符串
	        * @param str 要匹配的字符串
	        * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
	    */
	   private static boolean match(String regex, String str) {
		   Pattern pattern = Pattern.compile(regex);
		   Matcher matcher = pattern.matcher(str);
		   return matcher.matches();
		   }
         
	   public static String execCurl(String[] cmds){
	        ProcessBuilder process = new ProcessBuilder(cmds);
	        Process p;
	        try {
	            p = process.start();
	            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
	            StringBuilder builder = new StringBuilder();
	            String line = null;
	            while ((line = reader.readLine()) != null) {
	                builder.append(line);
	                builder.append(System.getProperty("line.separator"));
	            }
	            return builder.toString();

	        } catch (IOException e) {
	            System.out.print("error");
	            e.printStackTrace();
	        }
	        return null;
	    }
}

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

www.365codemall.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值