Curl返回400个错误请求(带空格的url)

时间:2012-09-09 19:17:34

标签: php curl

当我使用curl库并尝试从url获取图像时,我得到400错误的请求错误。 我发现问题在于编码网址。 但在我的情况下它不起作用,因为我的网址 - 它是服务器端图像的路径 - 如

http://example.com/images/products/product 1.jpg

我理解名称文件中的用户空间是不好的做法,但它不是我的服务器而不是我创建这些文件。

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, urlencode($url));
echo $ret = curl_exec($ch);

当我使用urlencode函数时 - curl返回http_code = 0

更新

$url = str_replace(' ', '+', $url);

不起作用,服务器返回404错误。

3 个答案:

答案 0 :(得分:17)

这可能有用吗?

$url = 'http://host/a b.img';
$url = str_replace(" ", '%20', $url);

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
echo $ret = curl_exec($ch);

答案 1 :(得分:1)

您需要使用rawurlencode()功能:

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, rawurlencode($url));
echo $ret = curl_exec($ch);

rawurlencode()必须始终是首选。 urlencode()仅用于遗留用途。有关详细信息,请查看this SO answer

答案 2 :(得分:0)

您不能对整个字符串进行urlencode,因为这会对斜杠和其他需要保持未编码的字符串进行编码。如果空格是你唯一的问题,那就是:

str_replace(' ', '+', $url);