HTTP/HTTPS: send port in Host header if the port is non-standard - hurl - Gopher/HTTP/HTTPS file grabber
 (HTM) git clone git://git.codemadness.org/hurl
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ff51a96c8791d2865a559634bffbde3d7e0cc41f
 (DIR) parent b6b313880e857ecf04f6d41ef54ca452b804d1dd
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Sun, 10 Nov 2019 14:28:31 +0100
       
       HTTP/HTTPS: send port in Host header if the port is non-standard
       
       Diffstat:
         M hurl.c                              |      20 ++++++++++++++------
       
       1 file changed, 14 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/hurl.c b/hurl.c
       @@ -178,7 +178,7 @@ https_request(void)
                const char *errstr;
                size_t n, len;
                ssize_t r;
       -        int fd = -1, httpok = 0, ret = 1;
       +        int fd = -1, httpok = 0, ret = 1, stdport;
        
                if (pledge("stdio dns inet rpath unveil", NULL) == -1)
                        err(1, "pledge");
       @@ -204,12 +204,16 @@ https_request(void)
                if (pledge("stdio", NULL) == -1)
                        err(1, "pledge");
        
       +        stdport = u.port[0] == '\0' || strcmp(u.port, "443") == 0;
       +
                /* create and send HTTP header */
                snprintf(buf, sizeof(buf),
                        "GET %s HTTP/1.0\r\n"
       -                "Host: %s\r\n"
       +                "Host: %s%s%s\r\n"
                        "Connection: close\r\n"
       -                "\r\n", u.path, u.host);
       +                "\r\n", u.path, u.host,
       +                stdport ? "" : ":",
       +                stdport ? "" : u.port);
                if ((r = tls_write(t, buf, strlen(buf))) < 0) {
                        fprintf(stderr, "tls_write: %s\n", tls_error(t));
                        goto err;
       @@ -298,7 +302,7 @@ http_request(void)
                char buf[READ_BUF_SIZ], *p;
                size_t n, len;
                ssize_t r;
       -        int fd = -1, httpok = 0, ret = 1;
       +        int fd = -1, httpok = 0, ret = 1, stdport;
        
                if (pledge("stdio dns inet", NULL) == -1)
                        err(1, "pledge");
       @@ -308,12 +312,16 @@ http_request(void)
                if (pledge("stdio", NULL) == -1)
                        err(1, "pledge");
        
       +        stdport = u.port[0] == '\0' || strcmp(u.port, "80") == 0;
       +
                /* create and send HTTP header */
                snprintf(buf, sizeof(buf),
                        "GET %s HTTP/1.0\r\n"
       -                "Host: %s\r\n"
       +                "Host: %s%s%s\r\n"
                        "Connection: close\r\n"
       -                "\r\n", u.path, u.host);
       +                "\r\n", u.path, u.host,
       +                stdport ? "" : ":",
       +                stdport ? "" : u.port);
                if ((r = write(fd, buf, strlen(buf))) == -1) {
                        fprintf(stderr, "write: %s\n", strerror(errno));
                        goto err;