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

Posted

技术标签:

【中文标题】如何使用 Ngrok 将简单的 Java HTTP 客户端应用程序连接到 Web 资源?【英文标题】:How do I connect a simple Java HTTP client app to a web resource using Ngrok? 【发布时间】:2017-04-23 09:57:50 【问题描述】:

我编写了一个简单的 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】:

我不太确定您想要什么,但您只是打算向远程服务器发出客户端请求,那么您不需要 ngrok 来执行此操作。 Ngrok 可帮助您在本地主机上设置可供外界使用的 Web 服务器,因为默认情况下,防火墙不允许从 Internet 连接到 localhost。

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

【讨论】:

以上是关于如何使用 Ngrok 将简单的 Java HTTP 客户端应用程序连接到 Web 资源?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ngrok 将流量转发到上下文路径?

如何使用 ngrok 将 webhook 发布到本地计算机上的 url?

如何调试 ngrok 隧道暴露的远程 JVM

java微信公众号开发----搭建ngrok环境

如何配置 HTTP 隧道以配置我的 edx localhost 以使用 ngrok 从 Internet 访问?

如何让 Ngrok 固定(静态)端口 TCP