【发布时间】:2021-12-25 03:39:03
【问题描述】:
我正在尝试为 shopify 创建一个履行应用程序,他们每小时向我的应用程序上的端点发送一次呼叫,其中包含他们需要我提供跟踪号的订单名称。
不幸的是,订单名称中有“#”(例如#1001.1)。当我收到这些调用时,查询参数在 # 处被截断,其余的查询字符串不再显示。当我从调用中删除 # 时(在测试时),整个查询字符串都通过了。
带#的
请求
GET http://localhost:4200/v1/fetch_tracking_numbers.json?order_names[]=#1001.1&order_names[]=#1002.1&order_names[]=#1003.2
服务器端记录的请求
GET http://localhost:4200/v1/fetch_tracking_numbers.json?order_names[]=
没有#的
请求
GET http://localhost:4200/v1/fetch_tracking_numbers.json?order_names[]=1001.1&order_names[]=1002.1&order_names[]=1003.2
服务器端记录的请求
GET http://localhost:4200/v1/fetch_tracking_numbers.json?order_names[]=1001.1&order_names[]=1002.1&order_names[]=1003.2
我正在使用基于 fasthttp 构建的 atreugo。
谢谢!
【问题讨论】:
-
标准库 http 栈是如何处理这个问题的? fasthttp 速度很快,因为它采用了快捷方式。
-
见Encode / Decode URLs。构建 URL 时,您应该始终正确编码原始字符串。
-
啊,快捷方式很有意义。
-
我实际上并没有对 URL 进行编码,我收到了来自 shopify 的电话。他们对其进行编码。 IDK 为什么他们需要使用名称而不是所有其他可能的 ID 来提供。
-
服务器永远不应该接收未编码的
#。它在客户端用作锚标识符,不随请求一起发送。任何接收它的服务器都应该只接收编码为%23的它。听起来 Shopify 在他们的处理程序中有一个错误。
标签: go url parameters get fasthttp