aboutsummaryrefslogtreecommitdiff
path: root/client.go
diff options
context:
space:
mode:
authorAdnan Maolood <[email protected]>2021-02-09 16:55:14 -0500
committerAdnan Maolood <[email protected]>2021-02-09 16:55:14 -0500
commitd2c70a33d5b182c78c373c246553720ed1e40a47 (patch)
tree78aac8fecf92a781e67f89bc2f9dfa9d8c7d2f7b /client.go
parentclient: Support IDNs (diff)
downloadgo-gemini-d2c70a33d5b182c78c373c246553720ed1e40a47.tar.xz
go-gemini-d2c70a33d5b182c78c373c246553720ed1e40a47.zip
client: Punycode request URL
Diffstat (limited to 'client.go')
-rw-r--r--client.go16
1 files changed, 15 insertions, 1 deletions
diff --git a/client.go b/client.go
index 820e4c3..1642e96 100644
--- a/client.go
+++ b/client.go
@@ -42,7 +42,21 @@ func (c *Client) Get(url string) (*Response, error) {
// Do performs a Gemini request and returns a Gemini response.
func (c *Client) Do(req *Request) (*Response, error) {
- // Extract hostname
+ // Punycode request URL
+ if punycode, err := punycodeHost(req.URL.Host); err != nil {
+ return nil, err
+ } else {
+ // Make a copy of the request
+ _req := *req
+ req = &_req
+ _url := *req.URL
+ req.URL = &_url
+
+ // Set the host
+ req.URL.Host = punycode
+ }
+
+ // Extract hostname and punycode it
hostname, port, err := net.SplitHostPort(req.Host)
if err != nil {
return nil, err