11

我已经尝试为 Node.js 使用各种 XMPP 库,但无法连接到 Google Talk 的 XMPP 服务器。我想联系并阅读朋友的状态,但我什至无法出门!

  1. 我有一个通过 Google Apps for Domains 托管的个人域,例如mydomain.com.
  2. 我编写了以下代码 - 它使用了 node-xmpp 库(https://github.com/astro/node-xmpp):

    jid = 'ryan@mydomain.com';
    password = 'my_google_password';
    
    // Establish a connection
    var conn = new xmpp.Component({
        jid         : jid,
        password    : password,
        host        : 'talk.google.com',
        port        : 5222
    });
    conn.on('online', function(){
        sys.put("ONLINE");        
    });
    conn.on('error', function(e) {
         sys.puts(e);
    });
    

已建立连接,但身份验证失败,我从 Google Talk 收到此消息:

<stream:error xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
    <not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-streams"/>
</stream:error>

......我错过了什么吗?我已经尝试过其他库(https://github.com/mwild1/xmppjs),甚至是 Python 库,但仍然无法进行身份验证。我 100% 确定我的 Google 用户名和密码是正确的 - 有什么提示/想法吗?

4

2 回答 2

11

弄清楚了。

我正在处理一些不准确的例子。

在我上面的示例中,您需要更改:

var conn = new xmpp.Component({...})

...到...

var conn = new xmpp.Client({...})
于 2010-12-03T20:44:37.383 回答
7

我在 ubuntu linux 上,所以要安装它,我首先必须这样做(首先安装 node/npm ,然后从 npm 网站接收)。

sudo apt-get install libexpat1 libexpat1-dev 
npm install node-xmpp
sudo apt-get install libicu-dev 
npm install node-stringprep

使用此代码段,我成功登录并从我的 gmail 帐户向我的 jabber.org 帐户发送了一条消息:

var argv = process.argv;
const xmpp = require('node-xmpp');
const sys = require('sys');

if (argv.length != 5) {
    sys.puts('Usage: node xmpp.js <my-jid> <my-password> <to>');
    process.exit(1);
}

const jid = argv[2];
const password = argv[3];
const to = argv[4];

// Establish a connection
const conn = new xmpp.Client({
    jid         : jid,
    password    : password,
    host        : 'talk.google.com',
    port        : 5222
});

conn.on('online', function(){
    console.log('online');

    conn.send(new xmpp.Element('presence'));
    conn.send(new xmpp.Element('message',
        { to: to, // to
            type: 'chat'}).
            c('body').
            t('testje'));
});

conn.on('error', function(e) {
    sys.puts(e);
});
于 2010-12-03T23:53:48.583 回答