Третий метод использует библиотеку, отличную от описанной выше. Это не похоже на проблему, но давайте посмотрим на содержание запроса с точки зрения сервера.
1)
GET /example1.html HTTP/1.1
Accept-Encoding: identity
Host: XXXXXXXX
Connection: close
User-Agent: Python-urllib/3.5
2)
GET /example2.html HTTP/1.1
Accept-Encoding: identity
Connection: close
Host: XXXXXXXX
User-Agent: Python-urllib/3.5
Нет заметной разницы между 1) и 2.
3)
GET /example3 HTTP/1.1
Host: XXXXXXXX
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.18.4
Последнее немного отличается; это означает, что, по крайней мере, существует возможность получения разных результатов в ответе, и это будет зависеть от конфигурации сервера.
Accept-Encoding: gzip, deflate
Это может привести к сжатию ответа сервером, что означает меньшее количество передаваемых данных.
Подключение: keep-alive
Сервер будет держать соединение открытым для повторного использования с последующими запросами (возможно, более эффективным).
User-Agent:
Многие веб-серверы адаптируют контент в зависимости от идентифицированного клиентского программного обеспечения. Я не думаю, что в этом конкретном случае будет какая-либо разница, однако это нельзя исключать полностью.