我得到了一个响应以及标头响应和所有其他信息,但是由于某种原因,主体为空:
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中添加了注释,以便您可以自己检查出来,并确保响应正文不应为空。
答案 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)
...