zoukankan      html  css  js  c++  java
  • 使用nodejs和Java访问远程服务器的服务

    既然这篇文章用的是nodejs和Java访问远程服务器的服务,那么咱们先用另一门编程语言,SAP的ABAP(我日常工作使用得最多的编程语言)来开发一个服务吧。

    这是我用ABAP编程语言实现服务的类:ZCL_DIS_HTTP_HANDLER

    这个类实现了一个接口IF_HTTP_EXTENSION里定义的一个方法HANDLE_REQUEST.

    大家可以不用被ABAP陌生的语法所迷惑,其实和Java的Servlet是相通的。

    我画了张图:

    我的这个远程服务很简单,就是无论调用者发送什么,都简单地返回一个文本:HELLO WORLD。

    现在我们就分别用nodejs和Java去消费。

    nodejs

    看下nodejs代码。

    下面的代码传入Buffer的WANGJER为我的用户名,123456为密码。使用的登录方式是Basic Authentication。

    var request = require('request');
    
    var getTokenOptions = {
    
    url: "https://<此处填入您的远程服务器上的服务地址url",
    
    method: "GET",
    
    headers: {
    
    'Authorization': 'Basic ' + new Buffer("WANGJER:123456").toString('base64')
    
    }
    
    };
    
    function getToken() {
    
    return new Promise(function(resolve,reject){
    
    var requestC = request.defaults({jar: true});
    
    console.time("Remote");
    
    requestC(getTokenOptions,function(error,response,body){
    
    console.log("response body: " + body);
    
    console.timeEnd("Remote");
    
    resolve(response);
    
    });
    
    });
    
    }
    
    getToken().then(function(response) {
    
    });
    

    执行结果:算上网络开销总共花了1.4秒。

    java

    下面代码的WANGJER为我的用户名,123456为密码。使用的登录方式是Basic Authentication。

    package connectivity;
    
    import java.io.BufferedReader;
    
    import java.io.IOException;
    
    import java.io.InputStream;
    
    import java.io.InputStreamReader;
    
    import org.apache.commons.codec.binary.Base64;
    
    import java.util.stream.Collectors;
    
    import org.apache.http.HttpResponse;
    
    import org.apache.http.client.ClientProtocolException;
    
    import org.apache.http.client.HttpClient;
    
    import org.apache.http.client.methods.HttpGet;
    
    import org.apache.http.impl.client.HttpClientBuilder;
    
    public class OPSystemConnectivity
    
    {
    
    static public void main(String[] arg){
    
    final HttpGet get = new HttpGet("https://<您远程服务器的url");
    
    HttpClient httpClient = HttpClientBuilder.create().build();
    
    String raw = "WANGJER:123456";
    
    String encoded = Base64.encodeBase64String(raw.getBytes());
    
    get.setHeader("Authorization", "Basic " + encoded);
    
    HttpResponse response;
    
    try {
    
    long start = System.currentTimeMillis();
    
    response = httpClient.execute(get);
    
    InputStream stream = response.getEntity().getContent();
    
    String result = new BufferedReader(new InputStreamReader(stream)).lines()
    
    .parallel().collect(Collectors.joining(" "));
    
    System.out.println("response: " + result);
    
    stream.close();
    
    long end = System.currentTimeMillis() - start;
    
    System.out.println("time consumed: " + end );
    
    } catch (ClientProtocolException e) {
    
    e.printStackTrace();
    
    } catch (IOException | UnsupportedOperationException e) {
    
    e.printStackTrace();
    
    }
    
    }
    
    }
    

    执行结果,耗时和nodejs差不多。

    注意,用本文介绍的方法不仅能访问远程服务器的服务,也能达到资源下载的目标:比如下载某服务器上的图片,mp3等。只需要把对应资源的url传入系统即可。

    要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

  • 相关阅读:
    BZOJ3752 : Hack
    XIV Open Cup named after E.V. Pankratiev. GP of SPb
    XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
    BZOJ2087 : [Poi2010]Sheep
    BZOJ2080 : [Poi2010]Railway
    BZOJ2082 : [Poi2010]Divine divisor
    Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
    XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
    XIII Open Cup named after E.V. Pankratiev. GP of Azov Sea
    XIII Open Cup named after E.V. Pankratiev. GP of SPb
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9812233.html
Copyright © 2011-2022 走看看