精华内容
下载资源
问答
  • /** * 请求接口 * @param httpUrl * @param httpArg * @return * @throws Exception */ private static String sendPost(String httpUrl,String httpArg) throws Exception { StringBuffer sbf = new StringBuffer...
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.google.common.collect.Lists;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Service;
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.text.SimpleDateFormat;
    import java.util.*;
    /**
     * 请求接口
     * @param httpUrl
     * @param httpArg
     * @return
     * @throws Exception
     */
    private static String sendPost(String httpUrl,String httpArg) throws Exception {
    
        StringBuffer sbf = new StringBuffer();
        // Post请求的url,与get不同的是不需要带参数
        URL url = new URL(httpUrl);
        HttpURLConnection connection = (HttpURLConnection) url
                .openConnection();
        // 设置是否向connection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true
        connection.setDoOutput(true);
        // Read from the connection. Default is true.
        connection.setDoInput(true);
        // 默认是 GET方式
        connection.setRequestMethod("POST");
        // Post 请求不能使用缓存
        connection.setUseCaches(false);
        //设置本次连接是否自动重定向
        connection.setInstanceFollowRedirects(true);
        // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
        // 意思是正文是urlencoded编码过的TEXT参数
        connection.setRequestProperty("Content-Type", "application/json");
        //添加请求头参数
        //connection.setRequestProperty("token",TOKEN);
        // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
        // 要注意的是connection.getOutputStream会隐含的进行connect。
        connection.connect();
        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写到流里面
        out.writeBytes(httpArg);
        //流用完记得关
        out.flush();
        out.close();
        //获取响应
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        String strRead = null;
        while ((strRead = reader.readLine()) != null) {
            sbf.append(strRead);
            sbf.append("\r\n");
        }
        reader.close();
        String result = sbf.toString();
        //结束,记得把连接断了
        connection.disconnect();
    
        return result;
    }
    展开全文
  • JAVA WEB】使用HTTPS请求外部接口

    千次阅读 2017-02-25 15:36:02
    如何使用HTTPS请求外部接口

    虽说我是一个刚刚从大学毕业的年轻程序员,但我自认为我是一个特别老土的人,应该说特别不关心最近有什么新技术啊,热点啊什么的。所以即便在之前就听说过HTTPS,但因为从来都没有实际在工作中使用到,所以一直都没有去了解。
    直到最近在工作中与另一个公司的技术人员对接接口的时候,对方告诉我,他们的接口是放在国外的服务器上的,得通过HTTPS访问,还限制了TLS协议的版本。于是我百度了一下才知道HTTPS是个什么东西。
    简单来说,HTTPS就是在HTTP协议的基础上使用了具有安全性的SSL加密传输协议。总之就是,HTTPS比HTTP安全可靠。


    下面是基于JAVA语言写的如何使用HTTPS来进行请求。

    /** 
     * SSLClient 继承 DefaultHttpClient 
     * 使用 SSLClient 创建 HttpClient 实例
     */
    public class SSLClient extends DefaultHttpClient{  
    	public SSLClient() throws Exception{  
    		super();  
    		// 返回实现指定安全套接字协议的 SSLContext 对象。
    		SSLContext ctx = SSLContext.getInstance("TLSv1.1");  
    		X509TrustManager tm = new X509TrustManager() {  
    			@Override  
    			public void checkClientTrusted(X509Certificate[] chain,  
    					String authType) throws CertificateException {  
    			}  
    			@Override  
    			public void checkServerTrusted(X509Certificate[] chain,  
    					String authType) throws CertificateException {  
    			}  
    			@Override  
    			public X509Certificate[] getAcceptedIssuers() {  
    				return null;  
    			}  
    		};  
    		ctx.init(null, new TrustManager[]{tm}, null);  
    		SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  
    		ClientConnectionManager ccm = this.getConnectionManager();  
    		SchemeRegistry sr = ccm.getSchemeRegistry();  
    		// HTTPS --> HTTP 的安全版
    		// 即在 HTTP 下加入 SSL 层(HTTPS的安全基础),HTTPS的端口为443
    		sr.register(new Scheme("https", 443, ssf));  
    	}  
    }  
    
    
    

    原先我们在进行普通HTTP请求的时候,通过DefaultHttpClient来创建HttpClient实例。

    现在我们使用上述代码编写的SSLClient来创建HttpClient的实例,便能够进行HTTPS的请求。


    以上。

    展开全文
  • 介于保密的原因,外部接口就不公开了。我的需求是根据第三方提供的接口,查询数据。但是我的请求是包含了sql语句的。类似于下面这样的URL: http://X.X.X.X/tb/re?select * from table where name='zhangsan' ?...

    第一次做这种对接外部(第三方)接口的开发。记录一下:

    介于保密的原因,外部接口就不公开了。我的需求是根据第三方提供的接口,查询数据。但是我的请求是包含了sql语句的。类似于下面这样的URL:

    http://X.X.X.X/tb/re?select * from table where name='zhangsan'

    ?前面的是他们提供的接口。后面是我传的sql语句,当然还需要你的用户名密码或者token。根据这个需求python可能几行代码就能搞定了,但是我使用的java,这个时候就感受到了python的简洁。

    参考代码如下:

    说明:

    1.QUERYTB是我们的外部接口。

    2.sql是我们要写的sql语句。

    3.我没使用用户名密码登录,使用的是token所以换成token即可。

    4.使用GET请求

    package test;
    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.MalformedURLException;
    import java.net.URL;
    import java.util.Base64;
    import java.util.List;
    import java.util.Map;
    import javax.swing.text.AbstractDocument.Content;
    import com.fasterxml.jackson.core.JsonParser;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    import java.io.IOException;
    
    public class T {
     static String QUERY_TB = "http://。。。。";//外部接口
     static String QUERY_SQL = "?sql=。。。。";
     static String para="&access_token=。。。。。。。";
     static String uid = "123321456";
    
     public static void main(String[] args) {
      try {
       String u="512571";
        JSONArray j=test1(u).getJSONArray("data");
        for (int i =0;i<j.size();i++)
        {
         JSONArray oo=	(JSONArray) j.get(i);
        String one= (String) oo.get(0);
        String two= (String) oo.get(1);
        String three= (String) oo.get(2);
         System.out.println("1"+one+"2"+two+"3"+three);
         break;
        }
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    
    
    
     public static JSONObject test1(String UID) throws IOException {
       URL url = new URL(QUERY_TB + QUERY_SQL+UID+para);
       HttpURLConnection connection = (HttpURLConnection) url.openConnection();
       connection.setRequestMethod("GET"); // 设置请求方式
       connection.setConnectTimeout(15000);
       connection.connect();
       BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
       String line = null;
       StringBuilder result = new StringBuilder();
       while ((line = br.readLine()) != null) { // 读取数据
        result.append(line);
       }
       br.close();
       connection.disconnect();
       JSONObject jsondata = JSONObject.fromObject(result.toString());
       return jsondata;
     }
    

    这里面也遇到了很多的问题:

    1,就是我们发送请求的时候,不能像在写sql的时候来写sql语句,比如 select * from table,我们可以看到语句中出现了空格,在我们发送URL请求的时候是不能这么写的,如果这样写的话,就会报一个400的错误,400状态码就意味这服务器不能够了解我们的URL地址,也就是我们URL地址出现错误。有人可能就问,为什么我同样把相同的连接粘入到浏览器为什么能正常访问接口里的数据呢?究其原因是我们在使用浏览器访问我们的URL的时候,会自动帮我们把空格去掉,所以能正常访问。

    那我们怎么把连接放入到我们的URL请求里呢?我们按照正常的写法来写sql语句,但是在出现空格的地方我们使用20%来填补空格,然后再传进去就可以了,如果需要用到单引号,我们是使用27%来代替的,如果出现上面那个错误,最笨的方法就是把连接粘贴到浏览器,浏览器就自动给我们替补上对应的占位符来填补不同的字符。

    2,怎么取到里面的数据就参考代码吧,我这个还是有点困难的,因为返回的不是json数据,也简单做了一下处理。

    展开全文
  • JAVA 调用外部接口

    千次阅读 2020-08-04 08:57:25
    系统需要调用guo wai一个接口,由于调用的guowai接口,需要通过proxy请求 现在有3个方案 1.使用proxy进行http请求 2.直接使用guo wai服务器部署项目 3.使用HK服务器作为中介获取返回数据 1:问题,代理不稳定 2:...

    系统需要调用guo wai一个接口,由于调用的guowai接口,需要通过proxy请求
    现在有3个方案
    1.使用proxy进行http请求
    2.直接使用guo wai服务器部署项目
    3.使用HK服务器作为中介获取返回数据

    1:问题,代理不稳定
    2:问题,相对于较繁琐

    推荐用3

    当不想每次写完代码,部署到HK服务器进行测试,可以先本地使用proxy进行测试,或者使用proxy IP。
    工具都有提供端口号,具体可以咨询软件提供商

    如需要用SoapUI,Postman测试,请看Utils内的
    HTTP Auth认证请求- SoapUI
    HTTP Auth认证请求- Postman
    方法3:
    相关JAR包
    Maven依赖:

    org.apache.httpcomponents
    httpclient
    4.5

    org.jsoup jsoup 1.3.3

    JAVA工具类:
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpHost;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.util.EntityUtils;
    import sun.misc.BASE64Encoder;

    import java.io.IOException;

    /**

    • Created by BugRoot on 2020/7/28.
      */
      public class HttpUtils {

      /**

      • Post请求webservice 带http认证

      • @param url 请求地址

      • @param param 请求参数

      • @param SOAPAction SOAPAction 接口 – 如不需要注释掉

      • @return
        */
        public static String httpClientPostSOAPActionAndAuth(String url, String param, String username,String password, String SOAPAction){
        System.out.println(param);
        CloseableHttpClient http = HttpClientBuilder.create().setProxy(new HttpHost(“127.0.0.1”,1081)).build();// 测试环境–本地proxy方式
        // CloseableHttpClient http = HttpClientBuilder.create().build();// 生产环境–部署到服务器
        HttpPost httpPost = new HttpPost(url);
        CloseableHttpResponse res = null;
        String entity = “”;
        // 请求错误
        String errorMessage="";
        try {
        // 下述方式不推荐,BASE64Encoder和BASE64Decoder这两个方法是sun公司的内部方法,没有 在java api中公开过, 使用这些方法是不安全的
        // String token = username +":"+ password;
        // BASE64Encoder base64en = new BASE64Encoder();
        // token = base64en.encode(token.getBytes(“utf-8”));
        // token = "Basic " + token;
        // System.out.println(token);
        // 建议使用apache的API-可引用import org.apache.commons.codec.binary.Base64;进行替换
        我使用的是java.util的
        String token = “Basic " + “Basic " + Base64.getEncoder().encodeToString(username +”:”+password.getBytes(StandardCharsets.UTF_8));
        StringEntity s = new StringEntity(param, “UTF-8”);
        //s.setContentEncoding(“UTF-8”);
        // s.setContentType(“text/xml”);//发送json数据需要设置contentType
        // s.setContentType(“application/xml”);//发送json数据需要设置contentType
        httpPost.setHeader(“Accept-Encoding”,“gzip,deflate”);
        httpPost.setHeader(“Content-Type”,“text/xml”);
        httpPost.setHeader(“SOAPAction”,SOAPAction); //设置接口方法名
        httpPost.setHeader(“Host”,“xxx.com”);// 如不需请注释
        httpPost.setHeader(“Connection”,“Keep-Alive”);
        httpPost.setHeader(“Accept-Encoding”,“gzip,deflate”);
        httpPost.setHeader(“User-Agent”,“Apache-HttpClient/4.1.1 (java 1.5)”);
        // httpPost.setHeader(“Authorization”,token);
        httpPost.setHeader(“Authorization”,“Basic ZmYxOWY0ZTBmZDhmNDE0NTllNjI0M2Q5ZTZmYmJkMTY6dUs3Ln14cCg=”);
        httpPost.setEntity(s);
        res = http.execute(httpPost);
        HttpEntity responseEntity = res.getEntity();
        System.out.println(“response status” + res.getStatusLine());
        // 获取状态码
        int statusCod = res.getStatusLine().getStatusCode();
        if(statusCod > 200){
        // TODO: 2020/7/28
        }
        // 解析响应报文 TODO
        if (responseEntity != null) {
        System.out.println(“response length:” + responseEntity.getContentLength());
        entity = EntityUtils.toString(responseEntity);
        System.out.println(“response content:” + entity);
        } else {
        errorMessage = “service exception”;
        }
        } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } finally {
        try {
        http.close();
        res.close();
        } catch (IOException e) {
        e.printStackTrace();
        }

        }

        return entity;
        }
        }

    如图一报文:

    解析WebService返回的报文
    图一.jpg

    String result = httpClientPostSOAPActionAndAuth(url, param, username, password, SOAPAction);
    Document doc = Jsoup.parse(result );
    Elements error = doc.getElementsByTag(“Error”);
    if (error != null && error.size() > 0) {
    String code = doc.getElementsByTag(“Code”).text();
    String description = doc.getElementsByTag(“Description”).text();
    System.out.println(code);
    System.out.println(description);
    message = code + description;
    }

    System.out.println(message );

    展开全文
  • Java调用外部接口

    万次阅读 2018-08-03 15:18:15
    进行java的C/S软件开发时,对接了一些第三方提供的网页接口。 使用接口的方式没有想象的那么难。 比方说提供的接口是一个GET形式时,在网页上直接输出地址,将参数拼凑输入即可得到返回值。 如果是一个POST接口,...
  • import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util...
  • Java访问get请求,前端的Ajax也可以做,但是第三方的api接口都是有一个文件加密的,这种加密第三方api接口只提供了后端访问,也或者说后端有这个方便处理加密的问题,而JS就没有,所以有时候不得不用后端请求数据。...
  • 通过SpringBoot-RestTemplatedelete() 在特定的URL上对资源执行HTTP DELETE操作exchange() 在URL上执行特定的HTTP方法,返回包含对象...返回一个从响应体映射得到的对象getForEntity() 发送一个HTTP GET请求,返回的...
  • 本人微信 zf363133213 欢迎各位添加好友,共同探讨问题第一种方法:public Object test(){...//http请求头RestTemplate restTemplate = new RestTemplate();headers.setContentType(MediaType.parseMediaTy...
  • 最近在开发一个项目,需要将对象转成json,然后调用外部接口上报数据。 外部接口返回json数据 { "id": "xxx", // 上报成功时id才有数据 "code": "xxx", // 0代表上报成功,其他代表错误 "message": "xxx" // ...
  • POST请求外部接口,并携带参数

    千次阅读 2018-05-23 16:03:35
    package test.java; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; public...
  • 业务场景:通过aop的环绕模式,做请求外部接口的请求和响应日志收集。其中不同接口入参不一样,但是我需要获取一个唯一标识作为业务id。 1.定义一个注解:注入到方法 package ...
  • JAVA---请求后台接口

    2019-05-16 08:26:02
    在做一些项目的时候,会调用一些成型的api,之后直接以接口进行连接,在Java程序里面,会出现调用外部接口的情况,以前做的时候,只使用过ajax来请求,在Java里面去请求外部接口,还是第一次做,其实在postman里面有...
  • r语言数据可视化实战米霖单工具包114元包邮(需用券)去购买...本文要解决的场景如下:前端multipartfile 上传文件,后端接收后构造post请求,调用外部接口,传送文件流及其他参数内容包括:1.前端postman调用上传接口...
  • 接到一个需求,需要调用外部接口,而这个接口需要用到凭证,这个凭证需要用户名密码,经过多方整合,发现了commons-httpclient的强大之处,那就是可以解决市面上现有的调用外部接口请求方式问题,现在分享出来. ...
  • 记在工作中的一次任务,需要调用本部门另一个系统的接口,其中的HttpUtils不是我写的,是拿来的。主要是想记录这个工具类。 HttpUtils,HTTP请求工具类 import com.dhcc.mrp.common.utils.date.DateTimeUtil; ...
  • at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util....
  • 原标题:Spring Boot :访问外部接口在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如调用外部的地图API或者天气API。方案一: 采用原生的Http请求在代码中采用原生的...
  • JAVA中,java.net.HttpURLConnection 和 org.apache.http.client.HttpClient两个类,都可以模拟实现HTTP请求。其中,HttpURLConnection 是jdk提供的类,其实现了http请求的所有操作,但由于其方法偏向于原子操作,...
  • JAVA中,java.net.HttpURLConnection 和 org.apache.http.client.HttpClient两个类,都可以模拟实现HTTP请求。其中,HttpURLConnection 是jdk提供的类,其实现了http请求的所有操作,但由于其方法偏向于原子操作,...
  • 非常老而且稳定的项目需要使用Post请求来进行外部接口的调用,遇到了很多问题。 第一次尝试: 直接在项目中书写http请求代码。网上粘贴出的代码,脱敏后 import java.io.BufferedReader; import java.io....
  • JAVA中,java.net.HttpURLConnection 和 org.apache.http.client.HttpClient两个类,都可以模拟实现HTTP请求。其中,HttpURLConnection 是jdk提供的类,其实现了http请求的所有操作,但由于其方法偏向于原子操作,...
  • JAVA中,java.net.HttpURLConnection 和 org.apache.http.client.HttpClient两个类,都可以模拟实现HTTP请求。  其中,HttpURLConnection 是jdk提供的类,其实现了http请求的所有操作,但由于其方法偏向于原子操作...
  • 代码调用外部HTTP请求接口

    千次阅读 2019-03-13 15:52:03
    转载链接样例:https://www.cnblogs.com/guxiong/p/6661272.html https://zhidao.baidu.com/question/627561819246516844.html package ... import java.io.IOException; import java.io.Unsuppor...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 422
精华内容 168
关键字:

java请求外部接口

java 订阅