Yvision.kz
kk
Разное
Разное
399 771 постов41 подписчиков
Всяко-разно
0
03:13, 06 июня 2008

socket + poplib

В этой статье научимся работать с библиотекой socket и poplib
Для создания объекта сокета необходимо вызвать функцию socket, которая имеет 3 аргумента:

socket( [family[, type[, proto]]])

family = семейство
type = тип задающий семантику коммуникации
proto = протокол

Итак создаем сокет:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AF_INET - семейство ipv4
SOCK_STREAM - тип tcp

далее необходимо установить соединение с каким либо сервером
s.connect(('yvision.kz', 80))
функция connect имеет один аргумент, это кортеж (host, port) После соединения с сервером, мы можем передавать и принимать некоторую информацию. Рассмотрим процесс передачи и приема данных, более подробно, на примере соединения с Web-сервером (yvision.kz) и регистрации пользователя. Попробуем отправить такой пакет:
POST /ajax/register/validate.php HTTP/1.0
Content-type: application/x-www-form-urlencoded; charset=utf-8
User-Agent: Opera/9.21 (Windows NT 5.1; U;)
Host: yvision.kz
Content-Length: 0

rlogin=&email=&rpassword=&rpasswordconfirm=
Как можно догадаться это регистрация пользователя на yvision:)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('yvision.kz', 80))

login = ''
email = ''
password = ''
t = """POST /ajax/register/validate.php HTTP/1.0
Content-type: application/x-www-form-urlencoded; charset=utf-8
User-Agent: Opera/9.21 (Windows NT 5.1; U;)
Host: yvision.kz
Connection: Keep-Alive
Content-Length: %(len)d

rlogin=%(login)s&email=%(email)s&rpassword=%(password)s&rpasswordconfirm=%(password)s
""" % {'login': login, 'email': email, 'password': password, 
    'len': 43 + len(login) + len(email) + (len(password) * 2)}

s.send(t)
response = []
while True:
    line = s.recv(1024)
    if not line:
        break
    response.append(line)
print (''.join(response))

s.close()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('yvision.kz', 80))

t = """POST /register/activate HTTP/1.0
Content-type: application/x-www-form-urlencoded; charset=utf-8
User-Agent: Opera/9.21 (Windows NT 5.1; U;)
Host: yvision.kz
Content-Length: %(len)d

rlogin=%(login)s&email=%(email)s&rpassword=%(password)s&rpasswordconfirm=%(password)s
""" % {'login': login, 'email': email, 'password': password, 
    'len': 43 + len(login) + len(email) + (len(password) * 2)}

s.send(t)
response = []
while True:
    line = s.recv(1024)
    if not line:
        break
    response.append(line)
print (''.join(response))
Ответ от сервера должен быть примерно таким:
HTTP/1.1 200 OK
Server: nginx/0.7.0
Date: Fri, 06 Jun 2008 08:23:08 GMT
Content-Type: text/html; charset=utf-8
Connection: close
X-Powered-By: PHP/5.2.6
Set-Cookie: PHPSESSID=72gljj4v2dro32fqsom31637t1; path=/; domain=.yvision.kz
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

OK
Теперь нужно прочитать письмо которое сервер yvision.kz отправил нам для активации, ну как? Для этого нам поможет библиотека poplib.

Продолжение следует:)
0
276
7