【问题标题】:Need to construct a URL to test localhost and parameters - Visual Studio Code and Python需要构造一个 URL 来测试 localhost 和参数 - Visual Studio Code 和 Python
【发布时间】: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


【解决方案1】:

在 Visual Studio Code 中创建 Azure httpTrigger 时,您将获得一个 if(如果不是)then/try,但默认情况下可以正常工作的结构除外。我发现如果你删除条件语句并尝试在它之外运行它,它似乎不起作用。

因此,我没有尝试以编程方式解决这个问题,而是继续接受了原来的结构,它工作得很好。请注意:在 Visual Studio Code 中进行测试时,您会将 JSON 传递到测试字段,但是当在浏览器 URL 中传递它以进行本地测试时,参数以文字形式传递,因此您必须在以下情况下使用 req.params.get分配变量而不是用 json.dumps() 转储它。您可能必须更改条件以在输入时测试 JSON 格式,但这取决于您的函数用例。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2018-12-01
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多