Использовать ли пакет http.client или Socket в Python? - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю над проектом, в котором мне нужно отправить зашифрованные данные на сервер по сети.Я искал по интернету и проверил несколько программ, но я запутался между двумя пакетами http.client и Socket ранее, я думал, что оба они одно и то же.

Несколько строк из моего кода -

import http.client
.
.
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
conn = http.client.HTTPSConnection(host="wwww.my_server.com", port=443, context=ctx)
headers = {'Content-type': 'application/json'}
json_data = json.dumps(System_info)
conn.request('POST', '/post', json_data, headers)

Вышеприведенный метод работает без сертификатов, часть сертификата находится на рассмотрении.

Другой метод, который я обнаружил, использует Sockets-

import Socket
.
.
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=server_cert)
context.load_cert_chain(certfile=client_cert, keyfile=client_key)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn = context.wrap_socket(sock=s, server_side=False, do_handshake_on_connect=True, server_hostname=server_sni_hostname)
conn.connect((host_addr, host_port))

Я смог запустить приведенный выше код в моей системе, где обамоя система была клиентом и сервером.

Однако я хотел знать, что мне следует использовать, поскольку я хочу отправлять данные на сервер NMS, который должен быть зашифрован и защищен.

Дополнительная информация-

Os - Ubuntu 16
Python 3.5

1 Ответ

0 голосов
/ 01 февраля 2019

То, что вам нужно использовать, зависит от ваших реальных, но неизвестных требований: библиотеки типа http.client или запросы реализуют протокол HTTP как для простого HTTP, так и с TLS (т. Е. HTTPS).Эти модули построены поверх сокетов.

Если протокол приложения, используемый вашим конкретным сервером, является HTTP / HTTPS, то вы можете использовать библиотеки более высокого уровня, такие как http.client и запросы, но теоретически вы можете также использовать сокеты.Только использование простых сокетов делает его гораздо более сложным для реализации, и, скорее всего, он будет менее надежным и займет больше времени, чем использование установленных библиотек более высокого уровня.

Если ваш сервер не поддерживает HTTP / HTTPSвам нужно либо реализовать определенный (неизвестный нам) протокол, требуемый самим сервером, используя простые сокеты, либо вам нужно найти библиотеку, которая уже реализует протокол, требуемый сервером.Последний является предпочтительным в большинстве случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...