SSH隧道的HTTP请求

时间:2017-12-12 10:43:38

标签: android http ssh

我正在实现一个调用服务器上运行的休息服务的android应用程序。为了访问服务器,我必须转发端口(这是我大学的限制)。我已经使用cz.msebera.android。*库实现了所有http请求,并且对于转发我使用单独的应用程序JuiceSSH。这工作正常。现在我问自己是否可以通过编程方式将端口与已使用的库结合使用。任何人都有想法?我尝试过jsch但是我无法将它与库结合起来。

这是我的示例代码:

private class LoginTask extends AsyncTask<String, Void, JSONObject> {

    @Override
    protected JSONObject doInBackground(String... params) {
        Session session = SSHSession.createSession();
        JSONObject result = null;
        StringBuilder stringBuilder = new StringBuilder();
        HttpClient client = HttpClientBuilder.create().build();
        HttpPost loginRequest = new HttpPost(params[0]);
        JSONObject userInfo = createUserInfo(params[1], params[2]);
        if (userInfo != null) {
            StringEntity stringEntity = new StringEntity(userInfo.toString(), "UTF-8");
            stringEntity.setContentType("application/json");
            if (stringEntity != null) {
                loginRequest.setEntity(stringEntity);
                loginRequest.setHeader("Content-Type", "application/json");
                loginRequest.setHeader("Accept-Encoding", "application/json");
                try {
                    session.connect();
                    session.setPortForwardingL(5500, "localhost", 8080);
                    HttpResponse response = client.execute(loginRequest);
                    InputStream input = response.getEntity().getContent();
                    String tempJson;
                    if (input != null) {
                        BufferedReader reader
                                = new BufferedReader(new InputStreamReader(input, "UTF-8"));
                        while ((tempJson = reader.readLine()) != null) {
                            stringBuilder.append(tempJson);
                        }
                        result = new JSONObject(stringBuilder.toString());
                        return result;
                    }
                } catch (IOException | JSONException | JSchException e) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            e.printStackTrace();
                            AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this)
                                    .setTitle(R.string.error_login_title)
                                    .setMessage("Sie können derzeit nicht auf den Port im Netz"
                                            + "der Universität Passau zugreifen!\n" +
                                            "Bitte versuchen Sie es erneut im entsprechenden "
                                            + "Netz mit entsprechender Port-Weiterleitung!")
                                    .setNegativeButton("OK", null)
                                    .create();
                            alertDialog.show();
                        }
                    });
                }
            }
        }
        return result;
    }

主机,端口,用户名和密码都没问题,因为我在JuiceSSH中使用相同的端口转发功能。 运行代码我得到连接超时,我的AlertDialog告诉我,应用程序无法连接到服务器。

0 个答案:

没有答案