将 cURL 请求中的句点转义为 REST Api

Escaping periods in cURL request to REST Api

我正在使用 REST API,它使用格式 http://{server}/api/rest/products/{id}.json 作为获取产品数据的 GET 请求.我们要求 {id} 包含句点字符(“.”),这总是会导致 404 错误,因为服务器无法正确解释它。如果没有句点,请求就会正确完成。我曾尝试用 %2E 替换句点,但服务器会立即将其转换回句点。有什么方法可以正确转义 cURL GET 请求的句点字符吗?

代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://" . $server . "/api/rest/products/" . $sku . ".json");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

$httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);

解决方案是用不同的字符串替换句点。我修改了 API 以在服务器端进行字符串替换,并通过 cURL 从客户端传递一个十六进制代码 ('_0x2E_')。 API 然后执行字符串替换以恢复为原始值。此功能正常,因为服务器不会像以前那样将替换文本视为文件扩展名的开头。额外的下划线和 0x 是安全网。

调整后的示例代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://" . $server . "/api/rest/products/" . str_replace('.', '_0x2E_', $sku) . ".json");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

$httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);

我希望这对处理类似情况的其他人有所帮助。