Go 回复。主体返回一个“回复”;“空的”;身体
我得到了回复以及标题回复和所有内容,但由于某种原因,身体是空的:Go 回复。主体返回一个“回复”;“空的”;身体,go,Go,我得到了回复以及标题回复和所有内容,但由于某种原因,身体是空的: 我在完整的URL中添加了注释,以便您自己检查,并查看响应正文不应为空。问题不在go程序中,您需要提供额外的标题。在这种情况下,它是一个Cookie标题: package main import ( "fmt" "io/ioutil" "net/http" ) const url = "http://comicbookdb.com/search.php" func main() { reque
我在完整的URL中添加了注释,以便您自己检查,并查看响应正文不应为空。问题不在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 ....
2018年7月9日星期一06:13:35 GMT
200
阿帕奇
&{0xc420060040{0 0}假0x5e2200 0x5e2190}
它与页面相关。你可以设置一个额外的标题。在这种情况下,连接
标题
...
request.Header.Set("Connection", "keep-alive")
client := http.DefaultClient
response, err := client.Do(request)
...
我可以用Python获得响应体:这肯定是我在这个Go代码中遗漏的一些愚蠢的东西……哦,天哪,非常感谢!我知道这是件愚蠢的事。。。那么Python的请求库是否自动包含cookie头呢?我不知道python,我所知道的一切都是关于go的,你必须是文字。你是如何生成cookie的?你刚刚从浏览器中复制并粘贴了吗?第一次,我使用了chrome开发者控制台,有一个选项copy as cURL command
。您可以传递任意字符串,我已经使用了PHPSESSID=XXXXXXXX
,它可以工作。
...
request.Header.Set("Connection", "keep-alive")
client := http.DefaultClient
response, err := client.Do(request)
...