]> git.phdru.name Git - dotfiles.git/blob - bin/HEAD.py
Feat(recode-filenames-recursive): Allow to omit parameters
[dotfiles.git] / bin / HEAD.py
1 #! /usr/bin/env python3
2
3 from http.client import HTTPConnection, HTTPSConnection
4 from urllib.parse import urlsplit, parse_qsl, urlencode, quote, quote_plus
5 import sys
6 import urllib.request
7
8 url = sys.argv[1]
9
10 split_results = urlsplit(url)
11 protocol, netloc, path, query, tag = split_results
12 user = split_results.username
13 password = split_results.password
14 host = split_results.hostname
15 port = split_results.port
16 qlist = parse_qsl(query)
17
18 url = protocol + "://"
19 if user:
20     url += quote(user)
21     if password:
22         url += ':' + quote(password)
23     url += '@'
24 if host:
25     host = host.encode('idna').decode('ascii')
26     url += host
27     if port:
28         url += ':%d' % port
29 if path:
30     if protocol == "file":
31         url += quote(path)
32     else:
33         url += quote(path)
34 if query:
35     url += '?' + urlencode(qlist)
36 if tag:
37     url += '#' + quote_plus(tag)
38
39 if protocol == "https":
40     server = HTTPSConnection(host, port)
41 else:
42     server = HTTPConnection(host, port)
43 server.set_debuglevel(1)
44 server.putrequest("HEAD", path)
45
46 # I remember seeing some sites that return broken HTML or even HTTP response
47 # without "compatible" user agent; I don't know if such sites are still around,
48 # but this header doesn't cause any harm so I'd better continue to use it.
49 # UPDATE: I saw a number of sites that forbid "Mozilla compatible"
50 urllib_version = urllib.request.__version__
51 client_version = "Python-urllib/%s" % urllib_version
52 server.putheader('User-agent', client_version)
53
54 server.putheader('Accept-Charset', "koi8-r;q=1.0")
55 server.endheaders()
56
57 server.getresponse()