oracle数据库调用外部https接口

1.在数据库执行下面脚本创建java类

create or replace and compile java source named cux_http_utl as
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
import java.io.Writer;
import java.sql.SQLException;
import java.net.URL;

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import oracle.sql.CLOB;


public class CUX_HTTP_UTL {
    static class TrustAllTrustManager implements TrustManager, X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] x509Certificate, String string) throws CertificateException {
            return;
        }

        @Override
        public void checkServerTrusted(X509Certificate[] x509Certificate, String string) throws CertificateException {
            return;
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
    static TrustManager[] tm = { new TrustAllTrustManager() };
   private static OracleConnection getConnection() throws SQLException {
        return (OracleConnection) new OracleDriver().defaultConnection();
    }
     private static CLOB stringToClob(String input) throws Exception {
        OracleConnection conn = null;
        Writer writer = null;
        CLOB clob = null;
        try {
            conn = getConnection();
            clob = CLOB.createTemporary(conn, false, CLOB.DURATION_SESSION);
            writer = clob.setCharacterStream(0L);
            writer.write(input);
            return clob;
        } catch (Exception e) {
            throw e;
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (Exception e) {

                }
            }

            if (clob != null) {
                try {
                    clob.close();
                } catch (Exception e) {

                }
            }

            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {

                }
            }
        }
    }
    
     private static String clobToString(CLOB input) throws Exception {
        BufferedReader bufferedReader = null;
        StringBuffer buf = new StringBuffer("");
        String line = "";
        try {
            bufferedReader = new BufferedReader(input.getCharacterStream());
            while ((line = bufferedReader.readLine()) != null) {
                buf.append(line);
            }
            return buf.toString();
        } catch (Exception e) {
            throw e;
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (Exception e) {
                }
            }
        }
    }
    public static CLOB httpsRequest(String requestUrl, String requestMethod, String contentType,
                                    CLOB inputClob) throws Exception {
        String str = "";
        //  try {
        String inputStr = "";
        if (inputClob != null) 
          inputStr = clobToString(inputClob);
        StringBuffer buffer = null;
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;

        HostnameVerifier hv = new HostnameVerifier() {
            @Override
            public boolean verify(String urlHostName, SSLSession session) {
                return true;
            }
        };

        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, tm, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

        HttpsURLConnection.setDefaultHostnameVerifier(hv);
        URL url = new URL(requestUrl);
        HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setUseCaches(false);
        conn.setRequestMethod(requestMethod);
        if (contentType != null) {
            conn.setRequestProperty("Content-Type", contentType);
        }
        conn.connect();
        if (null != inputStr) {
            OutputStream os = conn.getOutputStream();
            os.write(inputStr.getBytes("utf-8"));
            os.close();
        }
        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("HTTP GET Request Failed with Error code : " + conn.getResponseCode());
        }
        is = conn.getInputStream();
        isr = new InputStreamReader(is, "utf-8");
        br = new BufferedReader(isr);
        buffer = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
            buffer.append(line);
        }
        br.close();
        conn.disconnect();
        if (buffer != null & !"".equals(buffer.toString()))
            str = buffer.toString();
        else
            str = "1";
        CLOB clob; 
        clob =stringToClob( str);
        return clob;
        /*  } catch (Exception e) {
      e.printStackTrace();
      return "ERROR:" + e.getMessage();
    } */
    }
 
}

2.在数据库创建函数

create or replace function cux_https_request(requestUrl    VARCHAR2,
                                             requestMethod VARCHAR2,
                                             contentType   VARCHAR2,
                                             inputClob     Clob)
  return Clob as
  language java name 'CUX_HTTP_UTL.httpsRequest(java.lang.String,java.lang.String,java.lang.String,oracle.sql.CLOB ) return oracle.sql.CLOB';

3.调用函数即可


```sql
 select Cux_https_request(requesturl    => 'https://opencs.517la.com/api/token/getToken',
                            requestmethod => 'POST',
                            contenttype   => 'application/json',
                            inputclob     => '{
    "data": {
      "appid": "string",
      "appsecret": "string"
    },
    "requestid": "20180616112955089",
    "version": "0.0.1"
  }')
    from dual;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值