def request(host, path, show):
    assert not path.startswith("/"), path
    global tag
    headers = {}
    if tag:
        headers["If-None-Match"] = tag
    if hgproto:
        headers["X-HgProto-1"] = hgproto

    conn = httplib.HTTPConnection(host)
    conn.request("GET", "/" + path, None, headers)
    response = conn.getresponse()
    print(response.status, response.reason)
    if show[:1] == ["-"]:
        show = sorted(h for h, v in response.getheaders() if h.lower() not in show)
    for h in [h.lower() for h in show]:
        if response.getheader(h, None) is not None:
            print("%s: %s" % (h, response.getheader(h)))
    if not headeronly:
        print()
        data = response.read()

        # Pretty print JSON. This also has the beneficial side-effect
        # of verifying emitted JSON is well-formed.
        if formatjson:
            # json.dumps() will print trailing newlines. Eliminate them
            # to make tests easier to write.
            data = json.loads(data)
            lines = json.dumps(data, sort_keys=True, indent=2).splitlines()
            for line in lines:
                print(line.rstrip())
        else:
            sys.stdout.write(data)

    if twice and response.getheader("ETag", None):
        tag = response.getheader("ETag")

    return response.status