diff options
| author | Adnan Maolood <[email protected]> | 2020-10-27 13:27:52 -0400 |
|---|---|---|
| committer | Adnan Maolood <[email protected]> | 2020-10-27 13:27:52 -0400 |
| commit | 8ab40648418c1770985b2a159343442453bd40c4 (patch) | |
| tree | 5fa00e55cc5f2507daf2d5c7f2bf35e3dc49af68 /examples | |
| parent | Remove (Text).HTML function (diff) | |
| download | go-gemini-8ab40648418c1770985b2a159343442453bd40c4.tar.xz go-gemini-8ab40648418c1770985b2a159343442453bd40c4.zip | |
Add NewRequestFromURL function
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/client.go | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/examples/client.go b/examples/client.go index eb25301..af94d44 100644 --- a/examples/client.go +++ b/examples/client.go @@ -7,6 +7,7 @@ import ( "crypto/tls" "crypto/x509" "fmt" + "net/url" "os" "time" @@ -76,21 +77,23 @@ func sendRequest(req *gmi.Request) error { case gmi.StatusClassInput: fmt.Printf("%s: ", resp.Meta) scanner.Scan() - req.URL.RawQuery = scanner.Text() + req.URL.RawQuery = url.QueryEscape(scanner.Text()) return sendRequest(req) case gmi.StatusClassSuccess: fmt.Print(string(resp.Body)) return nil case gmi.StatusClassRedirect: fmt.Println("Redirecting to", resp.Meta) - // Make the request to the same host - red, err := gmi.NewRequestTo(resp.Meta, req.Host) + target, err := url.Parse(resp.Meta) if err != nil { return err } - // Handle relative redirects - red.URL = req.URL.ResolveReference(red.URL) - return sendRequest(red) + // TODO: Prompt the user if the redirect is to another domain. + redirect, err := gmi.NewRequestFromURL(req.URL.ResolveReference(target)) + if err != nil { + return err + } + return sendRequest(redirect) case gmi.StatusClassTemporaryFailure: return fmt.Errorf("Temporary failure: %s", resp.Meta) case gmi.StatusClassPermanentFailure: |