As noted above, you should take the first 80 bytes from the serialized block. Since this data is hex-encoded, and each byte takes two hex-digit to encode, a block header is
80 * 2 = 160 digits.
You will notice that a few fields are inverted, it's because they are represented in little-endian format. Once you double-sha256 this data, you'll find a hash with trailing zeros and not leading, this is also because endianness.
Here is how the mentioned block looks like:
Take the first 160-digits serialized header
01000000 (This is 1 in little-endian)
Previous block hash:
a1c77a081de8e03801563ffb02833fd10c2dbd7fd2228ae7b0ba3b0200000000 (Notice the trailing zeroes)
A python 3 code that hashes it:
data = bytes.fromhex("01000000a1c77a081de8e03801563ffb02833fd10c2dbd7fd2228ae7b0ba3b020000000038805219c8ac7e9a96416d706dc1d8f638b12f46b94dfd1362b5d16cf62e68ff27b80a4c5c670f1c8bedfd00")
h1 = hashlib.sha256(data).digest()
h2 = hashlib.sha256(h1).digest()
It results in
a7f6f121a9903284d02ebfe1e772d131d1e12195493c120531f46a0900000000, that's precisely the little-endian version of