Есть у кого рабочий кусок кода с soket и передачей POST.
Не могу разобраться почему POST запрос не проходит.
Вот кусок кода:
h = { 'Host':'ya.ru',
'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language':'ru,en-us;q=0.7,en;q=0.3',
'Accept-Charset':'windows-1251,utf-8;q=0.7,*;q=0.7',
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Connection': 'keep-alive',
'Cache-Control': 'no-cache'
}
def advOpener(method, url, headers, post=None, proxy=None):
uris = urlparse.urlparse(url)
_head = copy.copy(headers)
_head['Host']= uris.netloc
_headers = ''
for key, val in _head.iteritems():
_headers += key + ': ' + val + '\r\n'
_headers += '\r\n'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if proxy:
adres, port = proxy.split(':')
s.connect((adres, int(port)))
else:
s.connect((uris.netloc, 80))
s.send(method + url + ' HTTP/1.1\r\n')
s.send(_headers)
if post:
query = ''
for key, val in post.iteritems():
query += key + '=' + val
s.send('Content-Length:' + str(len(query)) + '\r\n')
s.sendall(query)
data = ''
while True:
content = s.recv(8196)
if content:
print content
data += content
else: break
s.close()
if data:
return data
foo = advOpener('POST', url, h, post = {'zpost':'topaz'})