2009-08-19 62 views
4

我使用python的xmpp,我想創建一個簡單的客戶端與gmail id進行通信。Python2.6 xmpp Jabber錯誤

#!/usr/bin/python 
import xmpp 

login = 'Your.Login' # @gmail.com 
pwd = 'YourPassword' 

cnx = xmpp.Client('gmail.com') 
cnx.connect(server=('talk.google.com',5223)) 
cnx.auth(login,pwd, 'botty') 

cnx.send(xmpp.Message("[email protected]" ,"Hello World form Python")) 

當我運行的最後一行我得到一個異常

IOError: Disconnected from server.

而且當我運行其他語句我在控制檯中看到調試消息。

可能是什麼問題,我該如何解決它?

+0

什麼的調試語句說你斷開了正確過嗎?你看到一個未經授權的錯誤? <失敗的xmlns = 「甕:IETF:PARAMS:XML:NS:XMPP協議,SASL」> <未授權/> – 2009-09-23 17:13:53

回答

0

我認爲你需要發送的第一條消息之前調用sendInitPresence

... 
cnx.auth(login,pwd, 'botty') 
cnx.sendInitPresence() 
cnx.send(xmpp.Message("[email protected]" ,"Hello World form Python")) 
+0

嘗試,但我仍然得到了IO錯誤:從服務器錯誤斷開 – crashekar 2009-08-20 07:07:52

+0

發送存在第一是不是必需的。我只是針對gtalk進行測試,以確保它們沒有特殊規則。 – 2009-09-23 17:12:18

1

試試這個代碼段。爲了簡單起見,我沒有處理錯誤條件。

import xmpp 

login = 'Your.Login' # @gmail.com 
pwd = 'YourPassword' 

jid = xmpp.protocol.JID(login) 
cl = xmpp.Client(jid.getDomain(), debug=[]) 
if cl.connect(('talk.google.com',5223)): 
    print "Connected" 
else: 
    print "Connectioned failed" 

if cl.auth(jid.getNode(), pwd): 
    cl.sendInitPresence() 
    cl.send(xmpp.Message("[email protected]" ,"Hello World form Python")) 
else: 
    print "Authentication failed" 


要在客戶機類的構造的第二參數關掉調試消息,通調試= []

cl = xmpp.Client(jid.getDomain(), debug=[]) 
+0

試過菲利普但我得到身份驗證失敗。在嘗試此操作之前是否有任何需要更改的設置? – crashekar 2009-08-25 10:03:49

+1

奇怪的是,我只是用上面的代碼片段再次嘗試了一遍,它使用了一個有效的gmail用戶名([email protected])和密碼,它發送了一個預期的消息。這個(子集)代碼每天都在Linux和Windows機器上運行。使用Python 2.6和xmpppy-0.5.0rc1。也許確保登錄包含@ gmail.com後綴? – 2009-08-25 18:37:07

+0

並且仔細檢查您的密碼。 :) – 2009-08-27 17:34:49

6

Here是如何做了my PyTalk client

不要忘記userID中的@ gmail.com。

我認爲你應該嘗試在5222端口上連接talk.google.com。

也嘗試指定auth的資源。

import xmpp 
import sys 

userID = '[email protected]' 
password = 'YourPassword' 
ressource = 'Script' 

jid = xmpp.protocol.JID(userID) 
jabber  = xmpp.Client(jid.getDomain(), debug=[]) 

connection = jabber.connect(('talk.google.com',5222)) 
if not connection: 
    sys.stderr.write('Could not connect\n') 
else: 
    sys.stderr.write('Connected with %s\n' % connection) 

auth = jabber.auth(jid.getNode(), password, ressource) 
if not auth: 
    sys.stderr.write("Could not authenticate\n") 
else: 
    sys.stderr.write('Authenticate using %s\n' % auth) 

jabber.sendInitPresence(requestRoster=1) 
jabber.send(xmpp.Message("[email protected]" ,"Hello World form Python")) 

順便說一句,它看起來菲利普回答

1

非常接近,我認爲你必須寫這個。我測試了在Python 2.7與xmpppy 0.5.0rc1和IT工作的非常漂亮:P :):

import xmpp 

login = 'your [email protected]' # @gmail.com 
pwd = 'your pass' 
text='Hello worlD!' 
tojid='your friend @gmail.com' 



jid = xmpp.protocol.JID(login) 
cl = xmpp.Client(jid.getDomain(), debug=[]) 
if cl.connect(('talk.google.com',5223)): 
    print "Connected" 

else: 
    print "Connectioned failed" 

if cl.auth(jid.getNode(), pwd): 
    cl.sendInitPresence() 
    cl.send(xmpp.protocol.Message(tojid,text)) 
else: 
    print "Authentication failed"