go - Response.Body 返回 "empty"正文

标签 go

我收到了响应以及 header 响应和所有内容,但由于某种原因,正文是空的:

https://repl.it/repls/HastyAggravatingArchitect

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)


const url = "http://comicbookdb.com/search.php"

func main() {
    request, err := http.NewRequest(http.MethodGet, url, nil)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    q := request.URL.Query()
    q.Add("form_search", "Captain America")
    q.Add("form_searchtype", "Character")
  // http://comicbookdb.com/search.php?form_search=captain%20america&form_searchtype=Character
    request.URL.RawQuery = q.Encode()
    client := http.DefaultClient
    response, err := client.Do(request)
    fmt.Println(response.Header.Get("Date"))
    fmt.Println(response.StatusCode)
    fmt.Println(response.Header.Get("Server"))
    fmt.Println(response.Body)  

    r, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(string(r))
}

我在完整的 URL 中进行了评论,以便您可以自己查看并看到响应正文不应为空。

最佳答案

问题不在 go 程序中,您需要提供额外的 header ,在本例中它是 Cookie header :

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

const url = "http://comicbookdb.com/search.php"

func main() {
    request, err := http.NewRequest(http.MethodGet, url, nil)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    // Here is requeired header
    request.Header.Add("Cookie", "PHPSESSID=jmujtqjctuk1bv1g02ni88q9u5'") 
    q := request.URL.Query()
    q.Add("form_search", "Captain America")
    q.Add("form_searchtype", "Character")
    request.URL.RawQuery = q.Encode()
    client := &http.Client{}
    response, err := client.Do(request)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    fmt.Println(response.Header.Get("Date"))
    fmt.Println(response.StatusCode)
    fmt.Println(response.Header.Get("Server"))
    fmt.Println(response.Body)

    r, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(string(r))
}

输出:

Mon, 09 Jul 2018 06:13:35 GMT
200
Apache
&{0xc420060040 {0 0} false <nil> 0x5e2200 0x5e2190}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org ...
..... omitted ....

关于go - Response.Body 返回 "empty"正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51238163/

相关文章:

process - 有没有办法可靠地列出 Go 中的子流程?

http - Golang HTTP 服务器请求异步还是同步?

mongodb 获取最后 30 分钟前插入的项目

unit-testing - 需要帮助查明中间件测试(Golang)中零引用错误的原因

http - 有没有办法序列化golang http请求对象并持久保存在数据库中

go - Terraform 提供程序应如何处理服务器端应用的默认值?

templates - Golang 模板范围换行删除

go - 如何拆分字符串并将其用作 Go 中的函数参数?

go - 可接受的 Golang 惯用嵌套错误处理?

mysql - golang 代码中 mysql 查询的自动递增不起作用