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
01000000a1c77a081de8e03801563ffb02833fd10c2dbd7fd2228ae7b0ba3b020000000038805219c8ac7e9a96416d706dc1d8f638b12f46b94dfd1362b5d16cf62e68ff27b80a4c5c670f1c8bedfd00
And parse:
Version: 01000000
(This is 1 in little-endian)
Previous block hash: a1c77a081de8e03801563ffb02833fd10c2dbd7fd2228ae7b0ba3b0200000000
(Notice the trailing zeroes)
Merkle Root: 38805219c8ac7e9a96416d706dc1d8f638b12f46b94dfd1362b5d16cf62e68ff
Timestamp: 27b80a4c
Bits: 5c670f1c
Nonce: 8bedfd00
A python 3 code that hashes it:
import hashlib
data = bytes.fromhex("01000000a1c77a081de8e03801563ffb02833fd10c2dbd7fd2228ae7b0ba3b020000000038805219c8ac7e9a96416d706dc1d8f638b12f46b94dfd1362b5d16cf62e68ff27b80a4c5c670f1c8bedfd00")
h1 = hashlib.sha256(data).digest()
h2 = hashlib.sha256(h1).digest()
print(h2.hex())
It results in a7f6f121a9903284d02ebfe1e772d131d1e12195493c120531f46a0900000000
, that's precisely the little-endian version of 00000000096af43105123c499521e1d131d172e7e1bf2ed0843290a921f1f6a7