noBody,
"parse : empty url",
},
+
+ // CONNECT method.
+ {
+ "CONNECT proxy.example.com:443 HTTP/1.0\r\n" +
+ "Host: proxy.example.com\r\n\r\n",
+
+ &Request{
+ Method: "CONNECT",
+ RawURL: "proxy.example.com:443",
+ URL: nil,
+ Proto: "HTTP/1.0",
+ ProtoMajor: 1,
+ ProtoMinor: 0,
+ Close: false,
+ ContentLength: 0,
+ Host: "proxy.example.com",
+ Form: Values{},
+ },
+
+ noBody,
+ noError,
+ },
}
func TestReadRequest(t *testing.T) {
return nil, &badStringError{"malformed HTTP version", req.Proto}
}
- if req.URL, err = ParseRequestURL(req.RawURL); err != nil {
- return nil, err
+ isConnect := strings.ToUpper(req.Method) == "CONNECT"
+ if !isConnect {
+ if req.URL, err = ParseRequestURL(req.RawURL); err != nil {
+ return nil, err
+ }
}
// Subsequent lines: Key: value.
// GET http://www.google.com/index.html HTTP/1.1
// Host: doesntmatter
// the same. In the second case, any Host line is ignored.
- req.Host = req.URL.Host
+ if !isConnect {
+ req.Host = req.URL.Host
+ }
if req.Host == "" {
req.Host = req.Header.Get("Host")
}