4

默认情况下,XMPP 状态会发布给订阅该人的所有用户。是否可以发送诸如 iq 调用之类的内容来获取我的名册中不存在的 id 的存在标签?

4

4 回答 4

7

如果您只想知道 XMPP 实体是否已连接,您可以使用 XMPP Ping ( XEP-0199 )。下面给出了两个 xmpp 用户“user1”和“user2”的示例。他们不在彼此的烘焙者名单上。我在下面的示例中使用 ejabberd 和 PSI。

  • “user2” ping “user1”(user1 在线)

智商:

<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>

回复:

<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="result" xml:lang="en" to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" />

  • “user2” ping “user1”(user1 离线。ping 的响应导致 type=error)

智商:

<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>

回复:

<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="error" xml:lang="en"     to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" >
<ping xmlns="urn:xmpp:ping"/>
<error type="cancel" code="503" >
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
于 2013-05-31T18:04:03.860 回答
4

我不这么认为。看看rfc,第 5.1.3 节。具体来说,它说:

在接收到来自用户的存在探测后,联系人的服务器
应该回复如下:

如果用户不在联系人名单中且订阅状态为“From”、“From + Pending Out”或“Both”(定义见订阅状态(第 9 节)),则联系人的服务器必须返回出席信息节键入“错误”以响应存在探测。

您可能会在响应中收到错误或禁止。

于 2011-08-09T18:41:54.490 回答
1

rfc 表示不允许您从不在您的花名册列表中的 id 接收出席信息。

但我相信可以通过修改服务器来查询存在(如果有允许的 xmpp 服务器)

于 2011-08-22T03:12:22.460 回答
0

不。

  • 状态是订阅的,而不是查询的。当您得到查询的答案时,这些信息已经过时了。
  • 存在是个人信息。您必须获得联系人的明确授权才能查看它。
于 2011-08-09T19:09:58.423 回答