【发布时间】:2016-04-07 06:59:54
【问题描述】:
所以我尝试使用httptest.TLSServer 模拟对https 请求的响应,但发出请求的http.Client 不断告诉我服务器给出的http 响应无效。我敢打赌这是因为没有实际的 SSL 证书。有什么方法可以让客户端忽略 tls,同时仍然模拟 https 请求?
有问题的测试代码
func TestFacebookLogin(t *testing.T) {
db := glob.db
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
resp := `
{
"id": "123",
"email": "blah",
"first_name": "Ben",
"last_name": "Botwin"
}
`
w.Write([]byte(resp))
}))
defer server.Close()
transport := &http.Transport{
Proxy: func(r *http.Request) (*url.URL, error) {
return url.Parse(server.URL)
},
}
svc := userService{db: db, client: &http.Client{Transport: transport}}
_, err := svc.FacebookLogin("asdf")
if err != nil {
t.Errorf("Error found: %s", err)
}
}
以及我试图提出的要求:
url := "https://<Some facebook api endpoint>"
req, err := http.NewRequest("GET", url, nil)
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
【问题讨论】: