Ну не именно 302, 3хх это все перенаправление. Вот пример
# -*- coding: utf-8 -*-
import socket
def load_page(url):
while True:
if url.find('://') != -1:
url = url.split('://')[1]
if not url.endswith('/'):
url = '{0}/'.format(url)
host, url = url.split('/', 1)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
try:
client.connect((socket.gethostbyname(host), 80))
print('ok connect')
except Exception, err: # if python 3: except Exception as err:
print(err)
return
header = ''
client.send('GET /{0} HTTP/1.0\r\nHost: {1}\r\nUser-agent: Python\r\n\r\n'.format(url, host))
while True: # header
header += client.recv(32)
if '\r\n\r\n' in header:
break
header, content = header.split('\r\n\r\n', 1)
header_list = header.split('\r\n')
http, status = header_list.pop(0).split(None, 1)
header = {}
for t in header_list:
a, b = t.split(':', 1)
header[a.upper()] = b.lstrip()
if status.startswith('3'):
url = header['LOCATION']
print('moved, location: {0}'.format(header['LOCATION']))
continue
elif not status.startswith('2'):
print('Oops, {0}'.format(status))
break
#print(header)
size = header.get('CONTENT-LENGTH')
if size and size.isdigit():
size = int(size)
else:
size = False
while True:
t = client.recv(2048)
if not t:
break
content += t
if not size:
load_show = 'load {0} byte'.format(len(content))
else:
d = '{0:0.2f}'.format(len(content)*100.0/size)
load_show = 'load {0}/{1} byte ({2}%)'.format(len(content), size, d)
print(load_show)
return content
if __name__=='__main__':
page = load_page('python.ru')
# print(page)
Насчет http- там и указывается номер порта 80, как с другими я хз