2017-03-08 66 views
1

我正嘗試使用用戶ID和密碼創建與Money.net API的安全連接,但我沒有收到服務器的任何迴應。我使用IPython的筆記本電腦的發展,我是新來的編程和Python :)純文本身份驗證:Python

import socket 
import sys 
Server_address = ('api.data.money.net',50010) 
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
print sys.stderr, 'connecting to %s port %s' %Server_address 
s.connect(Server_address) 
####### I pass plain text authentication credentials below ##### 
username, password, DATA 

沒有任何反應和服務器不響應與背部的世界「OK」預期

我也試過TLS插座以下,但.wrap方法它說: 「連接超時」

import socket 
import ssl 

# SET VARIABLES 
#packet, reply = "QS MSFT", "" 
HOST, PORT = 'api.data.money.net', 50010 

# CREATE SOCKET 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.settimeout(30) 

# WRAP SOCKET 
wrappedSocket = ssl.wrap_socket(sock,keyfile=None,server_side=0, 
          ssl_version=ssl.PROTOCOL_TLSv1,         cert_reqs=ssl.CERT_NONE,do_handshake_on_connect=True) 


# CONNECT AND PRINT REPLY 
wrappedSocket.connect((HOST, PORT)) 


#Plain Text authentication 
'username','password' 

我得到的迴應

'username','password' 

然後我執行以下

packet,reply="QS MSFT","" 
wrappedSocket.send(packet) 
print wrappedSocket.recv(1280) 

我得到以下錯誤到底

SSLError: ('The read operation timed out',) 
+0

您能否提供指向該API文檔的鏈接?另外,我在這裏沒有任何代碼來創建「安全」連接。 –

+0

嗨詹姆斯 - 鏈接如下https://www.money.net/datafeed – user2560244

+0

因此,就像@ Jean-Paul建議的那樣,文檔會說「...您必須使用TLS進行連接,我們的服務器將顯示一個TLS證書爲* .data.money.net ...「。你應該看看python [ssl模塊](https://docs.python.org/2.7/library/ssl.html) –

回答

1

我希望一個API,通過互聯網使用HTTPS,而不是插座被曝光。你確定你必須走那條路嗎?

有很多包使用基本身份驗證進行安全調用。 請求包是更高級別,並在許多項目中使用,所以這將是你最安全的賭注。

請注意,這些庫的早期版本完全忽略了證書驗證,如果它必須非常安全,請確保您。

看看Python, HTTPS GET with basic authentication的答案。

+0

按照他們的www.money.net/datafeed文檔「注意:如果您在網絡上使用代理服務器,我們的系統需要獨立的SOCKS代理或SOCKS代理與Web代理結合使用。處理HTTP和HTTPS流量將不起作用,因爲我們的市場數據連接使用與HTTP協議不兼容的專有TCP協議。「但是,如上所示,我嘗試了使用套接字包裝的TLS連接,但它也不工作:( – user2560244