如何使用Ngrok将简单的Java HTTP客户端应用程序连接到Web资源?

时间:2016-12-08 08:15:16

标签: java http tomcat apache-httpclient-4.x ngrok

我编写了一个简单的Java HTTP客户端应用程序,它应该使用ngrok从我的机器连接到外部资源。示例代码为:

public void sendMessage(String number, String message) {

    try {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(
                LINK);
        httpPost.addHeader("content-type", "application/json");

        List<NameValuePair> nvps = new ArrayList<>();
        nvps.add(new BasicNameValuePair("Authorization", getBasicAuth()));
        nvps.add(new BasicNameValuePair("LOGIN", LOGIN));
        nvps.add(new BasicNameValuePair("PASSWORD", PASSWORD));
        nvps.add(new BasicNameValuePair("Message", "Hello, World!"));
        httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

        HttpResponse response = httpClient.execute(httpPost);

        if (response.getStatusLine().getStatusCode() != 201) {
            throw new RuntimeException("Failed : HTTP error code : "
                    + response.getStatusLine().getStatusCode());
        }

        BufferedReader br = new BufferedReader(
                new InputStreamReader((response.getEntity().getContent())));

        String output;
        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }

        httpClient.getConnectionManager().shutdown();

    } catch (MalformedURLException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    }
}

ngrok文档告诉我应该为本地Web服务器提供一个端口。 但就我而言,它是一个简单的单类应用程序,没有像Tomcat一样配置。那么我应该如何配置ngrok来传输我的应用程序的HTTP请求呢?

我也尝试在Tomcat服务器后面运行我的应用程序,在两侧设置正确的端口(tomcat和ngrok) - 仍然没有建立通信。

1 个答案:

答案 0 :(得分:0)

我不确定你想要什么,但你只是计划向远程服务器发出客户请求,然后你不需要 ngrok 来做到这一点。 Ngrok可以帮助您在本地主机上设置可供外界使用的Web服务器,因为默认情况下,firwall不允许从Internet连接到localhost。

从您的代码中,我发现您正在尝试将请求发送给某个LINK。您是否尝试ping LINK以查看它是否实际接受连接(活动)?运行程序时,您的计算机是否已连接到互联网?