Response.Body返回“空”身体

时间:2018-07-09 04:17:54

标签: go

我得到了一个响应以及标头响应和所有其他信息,但是由于某种原因,主体为空:

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中添加了注释,以便您可以自己检查出来,并确保响应正文不应为空。

2 个答案:

答案 0 :(得分:2)

问题不在go程序中,在这种情况下,您需要提供其他标头为Cookie标头:

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 ....

答案 1 :(得分:0)

这与页面有关。您可以不用设置其他标题。在这种情况下,Connection标头。

...
request.Header.Set("Connection", "keep-alive")
client := http.DefaultClient
response, err := client.Do(request)
...