Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OkHttp3不完整的HTML页面,需要javascript吗?_Java_Okhttp3 - Fatal编程技术网

OkHttp3不完整的HTML页面,需要javascript吗?

OkHttp3不完整的HTML页面,需要javascript吗?,java,okhttp3,Java,Okhttp3,我从一个运行良好的网站上抓取了一些JSON数据。我可以登录并下载必要的数据。然而,在一个例子中,我必须下载一个HTML页面来从HTML中提取信息 我修改了请求头,使其与使用Chrome developer选项(F12)可访问的请求头相匹配 我收到一个HTML文件,但它比从Chrome手动保存的HTML文件小得多(将源代码另存为)。我注意到HTML文件中有各种ng(angular)引用,这让我想知道我是否只收到了某个javascript进程的第一部分,但还没有完成 此外,下载的HTML看起来与在C

我从一个运行良好的网站上抓取了一些JSON数据。我可以登录并下载必要的数据。然而,在一个例子中,我必须下载一个HTML页面来从HTML中提取信息

我修改了请求头,使其与使用Chrome developer选项(F12)可访问的请求头相匹配

我收到一个HTML文件,但它比从Chrome手动保存的HTML文件小得多(将源代码另存为)。我注意到HTML文件中有各种ng(angular)引用,这让我想知道我是否只收到了某个javascript进程的第一部分,但还没有完成

此外,下载的HTML看起来与在Chrome的第一个网络视图中下载的HTML文件相同(我复制粘贴了内容,文件大小相同)


那么,我是否应该考虑对请求进行一些额外的分析

如果它是有角度的页面,那么你就不走运了-整个页面是在运行时生成的,所以实际的
index.html
有点小


作为解决方法,我使用Selenium在headless browser中实际打开页面,并在angular应用程序初始化(即构建DOM)后获取内容。

但这不需要我使用Selenium实例重新登录才能获得正确的登录访问权限吗?现在,所有内容都使用带有OKhttp的表单登录进行初始化(通常我是为此劫持会话的;)听起来很酷:-)。任何教程链接如何做到这一点?所以你基本上是在使用okhttp和selenium的会话?从来没有使用过,我自己做过。如果你够固执的话,你可以通过okhttp客户端向浏览器提供网页,这样会话就已经开始了;)但我认为,在您的情况下,会话劫持是一种更简单的方法,可以完成您想做的事情,而不是创建web proxy.yep,因为它打开了实际的浏览器-chrome可以在headles模式下工作,因此它可以与CLI一起工作。我曾经尝试过一些只使用CLI的浏览器,但在某些情况下javascript在这些浏览器上工作不好,最终使用了实际的浏览器。
Request request = new Request.Builder().url(url)
                    .header("Host", "www.host.com")
                    .header("Connection", "Keep-Alive")
                    .header("Cache-Control", "max-age=0")
                    .header("Upgrade-Insecure-Requests", "1")
                    .header("User-Agent",this.user_agent_user_for_this_session)
                    .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
                    .header("Accept-Encoding", "gzip, deflate, br")
                    .header("Accept-Language", "en-US,en;q=0.9,fr;q=0.8,nl;q=0.7,de;q=0.6,af;q=0.5")
                    .get().build();

            Response response = client.newCall(request).execute();

            String html = IOUtils.toString(new GZIPInputStream(response.body().byteStream()));