我正在從事需要通過網絡將加密數據發送到服務器的項目。我已經在互聯網上搜索并檢查了幾個程序,但我之前對兩個包 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
提交
取消
