使用Client.Do时在封闭的正文上无效读取

trying to send more than one of the same HTTP request generated by http.ReadRequest, I'm getting the following error:

Post http://192.168.x.x:8000/dir1: http: invalid Read on closed Body
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x5ec4cc]

My code takes a file, and puts it in a bufio.NewReader. It then uses http.ReadRequest on what it had read, which is a HTTP POST request. finally - it opens another file, "wordlist.txt", which contains directories - and iterates over the original HTTP URI each time with a different directory from the list. For some reason - the second requests causes to program to error out (http: invalid Read on closed Body). Heres a working example (just change the paths to yours):

main.go

package main

import (
    "bufio"
    "fmt"
    "log"
    "net/http"
    "net/url"
    "os"
)

func main() {
    //Read HTTP request from text file
    rdr, err := os.Open("/opt/gohttp/tests/req2.txt")
    if err != nil {
        log.Println(err)
    }

    //Parse to a web request to work with using ReadRequest
    req, err := http.ReadRequest(bufio.NewReader(rdr))
    if err != nil {
        log.Println(err)
    }

    // fix for "requestURI can't be sent in client requests"
    req.RequestURI = ""

    //Open wordlist
    file, err := os.Open("/opt/gohttp/tests/wordlist.txt")
    if err != nil {
        log.Println(err)
    }
    defer file.Close()

    //Scan wordlist line by line and append each to the directory
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        var i string = scanner.Text()
        fmt.Println(i)
        //this part appends the wordlist word to the request sent e.g. /dir1
        u, err := url.Parse("http://" + req.Host + "/" + i) //todo: https? other protocols?
        if err != nil {
            log.Println("scanner parse error: ", err)
        }
        req.URL = u

        //Send the request
        fmt.Println("Sending request.." + "
")
        client := &http.Client{}
        response, err := client.Do(req)
        if err != nil {
            log.Println(err) // invalid read on closed body error
        }
        fmt.Println(*response)
    }
    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }

}

example HTTP request file

POST /hi HTTP/1.1
Host: 192.168.x.x:8000
Content-Length: 41

{"email":"aa","password":"secret"}

example wordlist file

0
1
dir1
dir2
dir3

application output

go run tests/main.go

0
Sending request..

{404 Not Found 404 HTTP/1.1 1 1...}

1
Sending request..

2019/01/28 04:27:52 Post http://192.168.x.x:8000/1: http: invalid Read on closed Body
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x5ec4cc]

goroutine 1 [running]:
main.main()
    /opt/gohttp/tests/main.go:53 +0x35c
exit status 2

Please note that the first HTTP request is sent successfuly, and only the second one returns the error above. How can I fix this?