Если хочешь работать именно с сокеми - читай спецификацию HTTP протокола (RFC2616 должно хватить), необязательно всю конечно.
После подключения к серверу (“server.ru”, а не “server.ru/page1?query=123”) ты должен послать запрос (GET или POST, а может и HEAD) на получение ресурса “/page1?query=123”, тогда сервер вернет страницу (или что-там тебе нужно). Только сервер вернет все сразу (скорее всего), а не несколькими пакетами TCP, если ресурс небольшой.
Уточни вопрос. Почему ты не можешь сделать .read(1024) ?
HTTP позволяет запросить у сервера часть ресурса, т.е. не с начала и не до конца. Правда не всегда эта фича реализуется самими серверами, для страниц наверняка не реализуется. Если ресурс большой и ты просто хочешь сэкономить трафик, а сервер может отдавать ресурс по частям, использую urllib2 ты запросить нужную тебе часть (протокол все же придется почитать), это всяко разно проще, чем пользовать сокеты непосредственно.
Вот пример использования urllib2 для получения части ресурса:
>>> import urllib2
>>> url = 'http://www.handsdriver.net/files/alice-girl.png' # это ресурс на моем сайте, весом 700Kb
>>> request = urllib2.Request(url, headers = {'range': 'bytes=0-99'}) # здесь я формирую запрос с необходимым мне заголовком range
>>> resource = urllib2.urlopen(request) # отправляю запрос
>>> resource.headers.dict # смотрю, какие заголовки есть в ответе сервера
{'content-length': '100', 'accept-ranges': 'bytes', 'content-range': 'bytes 0-99/728501', 'server': 'nginx/0.4.2', 'last-modified': 'Fri, 22 Sep 2006 22:31:00 GMT', 'connection': 'close', 'date': 'Mon, 02 Jun 2008 06:06:04 GMT', 'content-type': 'image/png'}
>>> len(resource.read()) # смотрю на размер полученного контента
100
Обрати внимание на то, какие заголовки возвращаются: accept-ranges, content-range, content-length
Такой же запрос к главной странице сайта не пройдет, т.е. контент будет возвращен полностью, а не только запрошенная часть. И заголовков accept-ranges и content-range ты уже не увидешь.
..bw