【发布时间】:2022-01-08 05:07:40
【问题描述】:
编辑 12.1 16:21 EST: 所以我缩小了范围。这有效(python3):
ptc = req.params.get('name')
assets = req.params.get('assets')
if not ptc:
try:
req_body = req.get_json()
except ValueError:
pass
else:
ptc = req_body.get('name')
assets = req_body.get('assets')
if ptc:
return func.HttpResponse(f"Hello boogerface, {ptc}, {assets}. This HTTP triggered function executed successfully.")
else:
return func.HttpResponse(
"This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
status_code=200
)
当我去掉条件并尝试使用 except 语句使其看起来像这样(python3)时:
ptc = req.params.get('name')
assets = req.params.get('assets')
req_body = req.get_json()
ptc = req_body.get('name')
assets = req_body.get('assets')
return func.HttpResponse(f"Hello, {ptc}, {assets}. This HTTP triggered function executed successfully.")
失败了。浏览器中的 HTTP 500 和:
HTTP 请求不包含有效的 JSON 数据
作为错误代码
谁能告诉我为什么第二组不起作用?因为它只是没有 if/thens 和 try excepts 的代码。我只是不认为这会产生太大的不同。我完全希望它能够工作。当我的意思是工作时,它会显示在浏览器窗口中:
结束编辑
我在用 Python 编写的 Visual Studio Code (VSC) 中创建了一个 httptrigger。我正在尝试重建 URL(不在代码中,只是为了测试使用 URL 通过浏览器进行的调用)。
到目前为止我做了什么: 当我从 VSC 中执行函数并将 JSON 字符串作为 JSON 字符串传递时(在执行窗口中) - 例如{"var1":"value1","var2":"value2"} 对于与我的代码中的变量匹配的任意数量的参数,它运行成功。
浏览器是另一回事。
当我有一个参数来传递 URL 时,例如(以下不是实际 URL):
http://localhosturl/thisapi?var1=OHMYGOSH
没有引号也没有任何编码,HttpResponse 就可以了。它给了我浏览器中的参数值。 此时将值返回给浏览器对我来说只是一个调试步骤。
现在,当我 URL 中有多个值时,例如:
http://localhosturl/thisapi?var1=OHMYGOSH&var2=THISISCRAZY
我在本地主机的浏览器中收到 HTTP ERROR 500。在终端中,我收到错误解释为:
HTTP 请求不包含有效的 JSON 数据
JSON 字符串在参数化 URL 中的外观如何?是我的终极问题。我到处找。我已经尝试或调查过:
- URL 编码 (?"URL 编码字符串")
- Base64 编码(?"Base64encoded string")
- 还有 ?req="URLorBase64encodedstring" 因为 req 是它被传递到的参数
- 直接 - 如上面的示例 URL
- 提供在代码内部以编程方式创建它的解决方案(这是我不想做的)
我现在只想构造一个传递多个值的 URL,以使 API 调用在浏览器中工作。
为什么?因为当我将它部署到服务器时,我想要另一个脚本来构造一个 URL 来进行调用,以便我可以在计算后接收值。所以我需要知道我可以发送的最终 URL 是什么样的。
再次,我搜索了 stackoverflow 和许多其他网站。
提前致谢!
【问题讨论】:
-
httptrigger是什么?这个怎么运作?你有这方面的文件吗?也许它需要一些不同的东西。通常JSON是在请求正文中发送,而不是在 url 中。 -
@furas httptrigger 是调用 API URL 时使用的事件。所以基本上,我想从网页向 API 发送值并让它进行计算并返回几个值以打印到网页。为此,我必须从脚本构建 URL。这就是为什么我在 localhost URL 中检查它以查看它的外观,以便我可以正确构建它。当我在 Visual Studio 代码中传递 JSON 时,效果很好。需要构造 URL 来做同样的事情。
标签: python json parameter-passing urlencode azure-http-trigger