Задача: Сделать простых клиента и сервера, работающих по HTTP. Тип запроса (GET или POST) не важен.
1. Сервер
После запуска доступен по порту TCP 9999.
При получении данных от клиента распаковывает MSGPACK, далее в полученном JSON'е проверяет поле test_date регулярным выражением на формат 01.01.1111 (день.месяц.год4цифры).
Если дата в этом формате - возвращает {“result”:“ok”} также упакованный в MSGPACK. Если нет - {“result”:“error”} также упакованный в MSGPACK
2. Клиент
После старта посылает запрос на сервер с данными даты в формате 01.01.1111 и выводит ответ сервера в консоль. После - то же самое, только с датой в другом формате и с выводом результата.
Учитывайте, что на клиенте необходимо упаковывать данные в MSGPACK перед отправкой, а также распаковывать при получении, так как сервер работает только с MSGPACK.
Сервер
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket import json import msgpack import re def check_field(data): data = msgpack.unpackb(data) data = json.loads(data) test_date = data.get('test_date') result = re.search(r'(0[1-9]|[12][0-9]|3[01])[- .](0[1-9]|1[012])[- .]\d\d', test_date) if result == None: return msgpack.packb(json.dumps({"result":"error"})) else: return msgpack.packb(json.dumps({"result":"ok"})) """ server """ sock = socket.socket() sock.bind(('127.0.0.1', 9999)) sock.listen(5) conn, addr = sock.accept() print 'connected:', addr while True: data = conn.recv(2048) if not data: break conn.send(check_field(data)) conn.close() """ end server """
Клиент
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket import json import msgpack date_array = ['10.01.2016', '10a.01.2016'] conn = socket.socket() conn.connect( ('127.0.0.1', 9999) ) for i in date_array: data = {'test_date':i} data = json.dumps(data) data = msgpack.packb(data) conn.send(data) result = conn.recv(2048) result = msgpack.unpackb(result) result = json.loads(result) print(result.get('result') ) conn.close()
Сделал данную задачу через стандартный модуль сокетов, все работает! Но меня смущает что в моем коде нигде нет http и соответсвенно get или post запросов.
Как можно реализовать данную задачу используя http?