我正在从事需要通过网络将加密数据发送到服务器的项目。我已经在互联网上搜索并检查了几个程序,但我之前对两个包 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 16Python 3.5
1 回答

交互式爱情
TA贡献1712条经验 获得超3个赞
您需要使用什么取决于您实际但未知的需求:像 http.client 或requests这样的库实现了 HTTP 协议,包括纯 HTTP 和 TLS(即 HTTPS)。这些模块建立在套接字之上。
如果与您的特定服务器通信的应用程序协议是 HTTP/HTTPS,那么您可以使用更高级别的库,如 http.client 和 requests,但理论上您也可以使用套接字。只是,使用普通套接字会使您实现起来更加复杂,并且与使用已建立的更高级别的库相比,它很可能不那么健壮,并且需要更多的时间来实现。
如果您的服务器不支持 HTTP/HTTPS,您需要使用普通套接字自己实现服务器所需的特定(我们不知道)协议,或者您需要找到一些已经实现服务器所需协议的库。在大多数情况下,后者是首选。
添加回答
举报
0/150
提交
取消