猿问

Python 中是否使用 http.client 或 Socket 包?

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


鸿蒙传说
浏览 212回答 1
1回答

交互式爱情

您需要使用什么取决于您实际但未知的需求:像 http.client 或requests这样的库实现了 HTTP 协议,包括纯 HTTP 和 TLS(即 HTTPS)。这些模块建立在套接字之上。如果与您的特定服务器通信的应用程序协议是 HTTP/HTTPS,那么您可以使用更高级别的库,如 http.client 和 requests,但理论上您也可以使用套接字。只是,使用普通套接字会使您实现起来更加复杂,并且与使用已建立的更高级别的库相比,它很可能不那么健壮,并且需要更多的时间来实现。如果您的服务器不支持 HTTP/HTTPS,您需要使用普通套接字自己实现服务器所需的特定(我们不知道)协议,或者您需要找到一些已经实现服务器所需协议的库。在大多数情况下,后者是首选。
随时随地看视频慕课网APP

相关分类

Python
我要回答