I'm using golang to parse a raw HTTP request and then send a request to the URL and print the output.
Code:
stra := `GET / HTTP/1.1
Host: google.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36
Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close`
r, err := http.ReadRequest(bufio.NewReader(strings.NewReader(stra)))
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
u, err := url.Parse("https://" r.Host r.URL.String())
if err != nil {
panic(err)
}
req.URL = u
transport := http.Transport{}
transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
client := &http.Client{Transport: &transport}
resp, err := client.Do(req)
Error:
unexpected EOF
Kindly help.
CodePudding user response:
http header must ends with \r\n\r\n
, but it seems that \n
is ok for http.ReadRequest
? the code below really works.
package main
import (
"bufio"
"fmt"
"net/http"
"os"
"strings"
)
func main() {
stra := `GET / HTTP/1.1
Host: google.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36
Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
`
req, err := http.ReadRequest(bufio.NewReader(strings.NewReader(stra)))
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Println(req)
}