X-Git-Url: https://pd.if.org/git/?p=zpackage;a=blobdiff_plain;f=src%2Ffetchurl.c;h=21e2e661e7a85fa169e81f792a9154acdb3ad8eb;hp=1ef4abd2c1f70901b01ca1ff020e4ce9d20e7278;hb=6ff53c22d4ab08760c5e8747cd12e4f8bc0b82f6;hpb=d1ba8bc5b1082bf13ea3b3a7d8b7b688191c766d diff --git a/src/fetchurl.c b/src/fetchurl.c index 1ef4abd..21e2e66 100644 --- a/src/fetchurl.c +++ b/src/fetchurl.c @@ -22,9 +22,12 @@ struct tls_uri { char *host; char *port; char *path; + char *encoded_path; char *query; + char *encoded_query; char *fragment; }; + int tls_parse_uri(char *, struct tls_uri *); void tls_free_uri(struct tls_uri *); @@ -583,6 +586,7 @@ int main(int ac, char *av[]) { struct tls_buffer request; char lmtime[80]; char *eoh = 0; + char *user_agent = 0; size_t total = 0; size_t header_len; char *url = 0; @@ -591,13 +595,14 @@ int main(int ac, char *av[]) { ltc_mp = tfm_desc; - while ((option = getopt(ac, av, "o:OrIfz:np#R:SkK")) != -1) { + while ((option = getopt(ac, av, "o:OrIfz:np#R:SkKU:")) != -1) { switch (option) { case 'o': outfile = optarg; break; case 'O': calcoutfile = 1; break; case 'S': printstatus = 1; head = 1; break; case 'k': verifypolicy = 0; break; case 'K': verifypolicy = 2; break; + case 'U': user_agent = optarg; break; case 'I': head = 1; case 'r': raw = 1; break; case 'f': failsilent = 1; break; @@ -680,10 +685,18 @@ int main(int ac, char *av[]) { } else { tls_buffer_append(&request, "GET ", 4); } - tls_buffer_append(&request, uri.path, strlen(uri.path)); + tls_buffer_append(&request, uri.encoded_path, strlen(uri.encoded_path)); + if (uri.encoded_query) { + tls_buffer_append(&request, "?", 1); + tls_buffer_append(&request, uri.encoded_query, strlen(uri.encoded_query)); + } tls_buffer_append(&request, " HTTP/1.1\r\n", 11); append_header(&request, "Host", host); + if (user_agent) { + append_header(&request, "User-Agent", user_agent); + } + append_header(&request, "Accept", "*/*"); append_header(&request, "Connection", "close"); if (lmfile) { append_header(&request, "If-Modified-Since", lmtime);