Java okhttp3如何解析动态Web内容?

时间:2016-08-21 01:30:46

标签: javascript java okhttp3

访问包含动态内容的网站时,如何获取在处理完JavaScript后在浏览器中显示的网址内容?

例如,okcupid.com/visitors显示最近访问过您的个人资料的用户的姓名。使用okhttp3的标准请求/响应方法,URL内容只有占位符用于用户名/图片的位置。

*编辑:我已经添加了处理项目中所有请求的内容。通常,此coade处理具有会话cookie和访问令牌的请求,没有任何障碍。它只是返回动态内容的网址内容。

public void sendRequest(String URL, String method, String params) {
    okhttp3.Request request;
    if(method.equals("POST")) {
        RequestBody formBody = new FormBody.Builder()
                .build();
        request = new okhttp3.Request.Builder()
                .url(URL)
                .post(formBody)
                .addHeader("Cookie", this.sessionCookie)
                .addHeader("Authorization", "Bearer " + this.accountManager.accessToken)
                .build();
    } else {
        request = new Request.Builder()
                .url(URL)
                .get()
                .addHeader("Cookie", this.sessionCookie)
                .build();
    }
    try {
        this.response = client.newCall(request).execute();
        ResponseBody responseBody = this.response.body();
        this.contentsOfUrl = responseBody.string();

        try {
            if(this.sessionCookie.equals("")) {
                Headers headers = response.headers();
                for (int i = 0; i < headers.size(); i++) {
                    String headerKey = headers.name(i);
                    String headerValue = headers.value(i);
                    if (headerKey.equals("Set-Cookie")) {
                        if (headerValue.startsWith("session=")) {
                            this.sessionCookie = utils.findString(headerValue, "(session=[a-zA-Z0-9,%]+);", 1);
                        }
                    }
                }
            }
        } finally {
            responseBody.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

0 个答案:

没有答案