如何在Go中获得Ajax响应

时间:2014-04-28 02:43:13

标签: go

我使用net / http包来获取url html响应,它一直运行到现在为止 但是当我得到一个使用Ajax来填充某些html元素的页面时,我无法获得html页面的所有内容。

如何使用http.Get完全等待页面加载然后获取整个网页内容。谢谢!

response, err := http.Get(url)
if err != nil {
    fmt.Printf("%s", err)
    os.Exit(1)
} else {
    defer response.Body.Close()
    contents, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Printf("%s", err)
        os.Exit(1)
    }
    fmt.Printf("%s\n", string(contents))
}

2 个答案:

答案 0 :(得分:2)

通过javascript生成的内容不是服务器发送的HTML的一部分。它需要在客户端进行评估,并且由于您的客户端是Go程序,您需要自己进行评估。

Otto这样的图书馆可能有所帮助。但是,根据您的需求,重新评估您的工具并使用像PhantomJS或类似的无头“浏览器”甚至可能更好。

答案 1 :(得分:2)

使用普通HTTP库无法提出要求:您还需要Web浏览器的DOM和JavaScript部分,甚至可能需要布局,具体取决于脚本的功能。因此,与net/http软件包相比,您最好不要考虑如何编写Web浏览器脚本以执行所需操作,或者使用可嵌入的Web浏览器库。

或者,您可以尝试逆向工程网页中的AJAX脚本正在执行的操作。如果您可以确定它正在执行的HTTP调用,则可以提供您所追求的信息。它还可以以更容易处理的形式提供信息,如JSON或XML。 Firefox和Chrome中的Web开发人员工具功能对于此类任务非常有用。