java - OkHttp 反向 Http

标签 java okhttp

如何实现反向http,如link 中所述使用 OkHttp

目前我的实现是这样的 问题是我必须解析我觉得不安全的http响应,它只是一个粗略的实现,如果有人可以提供更好的替代方案

String request = "POST /reverse HTTP/1.1\r\n" +
                        "Upgrade: PTTH/1.0\r\n" +
                        "Connection: Upgrade\r\n" +
                        "\r\n";

Socket socket = null;
try {
    socket = client.socketFactory().createSocket(ip, port);

    final PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    final BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    // send the reverse http request
    out.write(request);
    out.flush();

    // read the reverse http response
    String reverseResponse = readResponse(in);

    if (!reverseResponse.trim().startsWith("HTTP/1.1 101 Switching Protocols")) {
        throw new IOException("can't setup reverse connection");
    }

    while (!stopped) {
        String eventData = readResponse(in);

            out.write("HTTP/1.1 200 OK\r\n" +
                        "Content- Length: 0\r\n\" + " +
                        "\r\n");
            out.flush();
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (socket != null) {
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

最佳答案

冷知识:巧合的是,有一个不同的人drafted类似的解决方案也巧合地将其命名为reverse-http。该规范有 Reference Java Implementation ,但对你没有用,因为你无法控制服务器端。

步入正轨:

我可以找到您感兴趣的反向http的Javascript实现 here 。查看实现提示,但是,我想您已经有了详细信息。

对于您的问题,您需要一个可以处理 http 请求(http 服务器功能)的代码片段,同时嵌入到 http 客户端库中。

使用 Okhttp (我希望您指的是 this )来实现您想要的可能需要一些工作。它提供Websocket支持,这是reverse-http的更进化版本。所以,您可以尝试自定义Websocket implementation适合您情况的 okhttp。

像您这样的简单解决方案,您不需要解析 http 响应,可以通过改编流行的 NanoHTTPD 库的代码来实现。最新版本添加了更多依赖项,但 older release只有 1 个 java 文件,没有依赖性,非常适合此类改编。

关于java - OkHttp 反向 Http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49559752/

相关文章:

android - okHttp 是 Android 的一部分吗?

java - Android,从网络获取数据并更新 UI(多线程和 MVC 设计模式)

java - viewPager 不显示 fragment

java - 从其他 Activity/布局获取路径的问题

java - 唯一约束失败,SQLite,Java

java - 使用带有公钥/私钥身份验证的 JSch 从远程 SFTP 服务器获取数据。有什么例子吗?

java - 无法在 Java 中创建多个多边形 - 只有一个

android - 如何防止 Retrofit 自动跟随 302

android - 我如何让 Robospice 将来自 Retrofit 和 OKHttp 的 200 响应以外的任何其他内容视为错误

android - Retrofit2 不发送请求(不使用 OkHttp 进行日志记录)