使用 Smack API 进行 XMPP 注册返回错误请求 - 修改
Posted
技术标签:
【中文标题】使用 Smack API 进行 XMPP 注册返回错误请求 - 修改【英文标题】:XMPP Registration with Smack API returns bad-request - modify 【发布时间】:2015-12-21 06:17:00 【问题描述】:我正在尝试使用 Smack API (4.1.5) AccountManager 类的 createAccount 方法注册用户。我得到以下日志,并且请求似乎总是失败错误请求。我如何弄清楚请求有什么问题? 我尝试通过删除域和资源等来更改用户名,但结果仍然相同。字段长度是否存在问题。 我还在这里阅读了 XEP0077 http://xmpp.org/extensions/xep-0077.html 但无法弄清楚这个问题。
D/SMACK: SENT (0):
<iq to='xmpp.jp' id='w50y8-3' type='get'>
<query xmlns='jabber:iq:register'></query>
</iq>
D/SMACK: RECV (0):
<iq from='xmpp.jp' id='w50y8-3' type='result'>
<query xmlns='jabber:iq:register'>
<instructions>Choose a username and password to register with this server</instructions>
<username></username>
<password/>
</query>
</iq>
D/SMACK: SENT (0):
<iq to='xmpp.jp' id='w50y8-5' type='set'>
<query xmlns='jabber:iq:register'>
<username>test@xmpp.jp/SMACK</username>
<password>test123</password>
</query>
</iq>
D/SMACK: RECV (0):
<iq from='xmpp.jp' id='w50y8-5' type='error'>
<query xmlns='jabber:iq:register'>
<username>test@xmpp.jp/SMACK</username>
<password>test123</password>
</query>
<error code='400' type='modify'>
<bad-request xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
W/System.err: org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: bad-request - modify
有人可以帮助我了解如何诊断此类问题以及如何找出上述请求的问题吗?
【问题讨论】:
【参考方案1】:您需要通过https://www.igniterealtime.org/builds/smack/docs/4.1.5/javadoc/org/jivesoftware/smackx/iqregister/AccountManager.html#getAccountAttributes() 确定所需的帐户属性并提供这些。
【讨论】:
谢谢。根据xmpp.org/extensions/xep-0077.html#usecases-register。如果缺少所需的信息,则服务器应发回不可接受的 (406) 响应。但我得到了 400。但我仍然会按照你的建议尝试,并会得到结果。 我添加了这一行 Set我在 XMPPTCPConnectionConfiguration.setServiceName() 中传递了不正确的服务名称,这导致 IQRouter 中的数据包丢失,因为客户端尚未经过身份验证。希望这对某人有帮助!
【讨论】:
以上是关于使用 Smack API 进行 XMPP 注册返回错误请求 - 修改的主要内容,如果未能解决你的问题,请参考以下文章
使用 Smack API (xmpp) 从 Java 回调 JavaFX
如何使用 Smack XMPP API 处理(失败的)登录尝试
检索在 Smack XMPP 服务器中注册的用户的位置信息(无需订阅)
当使用 Smack 4.1.0 API 作为 Google 的 GCM CCS 的 XMPP 客户端时,SecurityMode.required 不起作用