我正在使用REST,它使用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);
发布于 2015-03-16 15:34:46
解决办法是用一个不同的字符串来代替这段时间。我修改了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);
我希望这对任何处理类似情况的人都有帮助。
https://stackoverflow.com/questions/28858318
复制相似问题