mirror of https://github.com/ginuerzh/gost
6 changed files with 125 additions and 9 deletions
@ -0,0 +1,63 @@ |
|||||
|
// +build http2client
|
||||
|
|
||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"crypto/tls" |
||||
|
"golang.org/x/net/http2" |
||||
|
"io" |
||||
|
"io/ioutil" |
||||
|
"log" |
||||
|
"net" |
||||
|
"net/http" |
||||
|
//"net/http/httputil"
|
||||
|
"os" |
||||
|
"time" |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
log.SetFlags(log.LstdFlags | log.Lshortfile) |
||||
|
} |
||||
|
|
||||
|
func main() { |
||||
|
tr := http2.Transport{ |
||||
|
TLSClientConfig: &tls.Config{ |
||||
|
InsecureSkipVerify: true, |
||||
|
}, |
||||
|
DialTLS: func(network, addr string, cfg *tls.Config) (net.Conn, error) { |
||||
|
return tls.DialWithDialer(&net.Dialer{Timeout: 30 * time.Second}, "tcp", "localhost:8080", cfg) |
||||
|
}, |
||||
|
} |
||||
|
client := http.Client{Transport: &tr} |
||||
|
|
||||
|
pr, pw := io.Pipe() |
||||
|
|
||||
|
req, err := http.NewRequest("CONNECT", "https://www.baidu.com", ioutil.NopCloser(pr)) |
||||
|
req.ContentLength = -1 |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
/* |
||||
|
req := &http.Request{ |
||||
|
Method: "CONNECT", |
||||
|
URL: &url.URL{Scheme: "https"}, |
||||
|
Host: "www.baidu.com:443", |
||||
|
Header: make(http.Header), |
||||
|
} |
||||
|
*/ |
||||
|
|
||||
|
resp, err := client.Do(req) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
defer resp.Body.Close() |
||||
|
|
||||
|
r, err := http.NewRequest("GET", "https://www.baidu.com", nil) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
r.Write(pw) |
||||
|
|
||||
|
n, err := io.Copy(os.Stdout, resp.Body) |
||||
|
log.Fatalf("copied %d, %v", n, err) |
||||
|
} |
||||
Loading…
Reference in new issue