![](/img/trans.png)
[英]Orion Context Broker Context subscriptions with Android client
[英]Orion Context Broker - subscriptions
我有一个小问题。 我正在订阅Orion Context Broker,并且回调URL出现了一个奇怪的问题:此代码可从教程中获取:
{
"entities": [
{
"type": "Room",
"isPattern": "false",
"id": "Room1"
}
],
"attributes": [
"temperature"
],
"reference": "http://localhost:1028/accumulate",
"duration": "P1M",
"notifyConditions": [
{
"type": "ONTIMEINTERVAL",
"condValues": [
"PT10S"
]
}
]
}
但是此代码不起作用:
{
"entities": [
{
"type": "Room",
"isPattern": "false",
"id": "Room1"
}
],
"attributes": [
"temperature"
],
"reference": "http://192.168.1.12:1028/accumulate?name=dupex",
"duration": "P1M",
"notifyConditions": [
{
"type": "ONTIMEINTERVAL",
"condValues": [
"PT10S"
]
}
]
}
唯一的不同是引用字段:“ reference”:“ 192.168.1.12:1028/accumulate?name=dupex”
我有:
{
"subscribeError": {
"errorCode": {
"code": "400",
"reasonPhrase": "Bad Request",
"details": "Illegal value for JSON field"
}
}
}
任何建议,请:)谢谢。
问题的根本原因是=
是禁止的字符,出于安全原因,在有效负载请求中不允许使用=
(有关此信息,请参见本节 )。
有两种可能的解决方法:
http://192.168.1.12:1028/accumulate/name/dupex
。 =
的代码为%3D
),并准备将其解码的代码。 在情况2中,您可以在subscriptionContext中使用以下参考: http://192.168.1.12:1028/accumulate?name%3Ddupex
: http://192.168.1.12:1028/accumulate?name%3Ddupex
:1028/accumulate?name%3Ddupex。 然后,以下示例将考虑编码并正确获取name
参数的代码示例(使用Flask作为REST服务器框架在Python中编写):
from flask import Flask, request
from urllib import unquote
from urlparse import urlparse, parse_qs
app = Flask(__name__)
@app.route("/accumulate")
def test():
s = unquote(request.full_path) # /accumulate?name%3Dduplex -> /accumulate?name=duplex
p = urlparse(s) # extract the query part: '?name=duplex'
d = parse_qs(p.query) # stores the query part in a Python dictionary for easy access
name= d['name'][0] # name <- 'duplex'
# Do whatever you need with the name...
return ""
if __name__ == "__main__":
app.run()
我猜想其他语言(Java,Node等)也可以使用类似的方法。
编辑 :Orion 1.2版支持NGSIv2中的通知自定义,允许这种使用情况。 例如,您可以定义以下订阅:
{
..
"notification": {
"httpCustom": {
"url": "http://192.168.1.12:1028/accumulate",
"qs": {
"name": "dupex"
}
}
..
}
..
}
有关详细信息,请查看NGSIv2规范中的 “订阅”和“自定义通知”部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.