gpt4 book ai didi

python - 如何将 python 变量编码为 URL 和网络服务器响应?

转载 作者:数据小太阳 更新时间:2023-10-29 02:53:25 26 4
gpt4 key购买 nike

假设我有一个 Python 函数,它接受多个参数作为输入并返回一个输出。

现在我想要一个基于此功能的“网络服务”(API)。这意味着应该有一个可以用一些参数调用的 URL,这个参数应该传递给函数,函数接受它们并计算相应的结果(输出)并将它传递回网络服务器,在它的转,向用户(可能是另一个程序)显示结果。

如果一个简单函数接受两个实值参数(例如 xy)并返回一个实值结果,则函数的调用可以组织throw get参数。例如:

www.my_web_site.org/my_func_name?x=1.234&y=3.456

因此,我希望网页只包含一个实数。

但是,对于我来说我应该如何处理更复杂的输入并不是那么明显。假设作为一些参数的值,我们可以有列表和字典。我应该如何在 URL 中对它们进行编码。我可以想象这样的事情:

www.my_web_site.org/my_func_name?x=[1,2,3,4]&y={1:'a',2:'b'}

但是,我不确定这是不是一个优雅的解决方案。是否有任何标准如何做到这一点?也许我应该使用 XML 或 JSON 对输入进行编码。

同样的问题也适用于输出。假设我们可以将字典或列表甚至集合作为输出。我应该如何表示它。我应该只使用 str(output) 还是有另一个“标准”解决方案?

最佳答案

Should I just use str(output)?

不!首先,您需要 repr(),因为它会为许多内置 Python 类型返回有效的 Python 代码。但是,要解析它的输出,您需要以某种方式执行它。虽然 Python 有 ast.literal_eval()它可以安全地运行在不受信任的输入上(它只处理字符串、数字、元组、列表、字典、 bool 值和 None),它仍然不是很便携,而且传递 Python 代码以获取数据有点难看.


最好的解决方案是使用 JSON 对其进行编码.您可以使用 json.dumps 进行序列化并使用 json.loads 进行反序列化。

  • 它几乎可以用每种语言进行解析,因此即使您想从其他工具发送请求,您也可以轻松创建参数
  • 它是一种标准化格式,也易于人类阅读。
  • 反序列化不受信任的数据是安全的(您不能编写在反序列化时变成大量内存的 JSON,也不能像使用 pickle 那样执行任意代码)
  • 它不会像 XML 那样增加大量的膨胀/窃听。

但是,在发送 JSON 有效负载时,我会使用 POST 而不是 GET(即使对 JSON 数据进行 url 编码是安全的 - 但在 URL 中包含一长串 JSON 并不是那么漂亮)。这样你就可以简单地将整个 JSON 结构转储到请求正文中,使用 application/json 内容类型,在你的后端你甚至可以轻松访问它,例如request.get_json()如果您使用的是 Flask。

如果你需要支持不是natively supported的变量类型在 JSON 中,您可以简单地将 JSON 编码器/解码器子类化,并将此类类型转换为您喜欢的任何符号,例如日期时间对象的 ISO 日期字符串。

关于python - 如何将 python 变量编码为 URL 和网络服务器响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26302679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com