当我使用curl库并尝试从url获取图像时,我收到了400个错误的请求错误。我发现问题出在编码url上。但在我的情况下,它不起作用,因为我的url——它是服务器端图像的路径——就像一样
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错误
这可能有效吗?
$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);
您需要使用rawurlencode()函数:
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, rawurlencode($url));
echo $ret = curl_exec($ch);
必须始终首选rawurlencode()。urlencode()仅保留用于遗留使用。有关更多详细信息,请查看此SO答案。
您不能对整个字符串进行url编码,因为这将对斜杠和其他需要保持未编码的内容进行编码。如果空间是你唯一的问题,这将做到:
str_replace(' ', '+', $url);
使用curl比其他方法更具挑战性。只需使用shell_exec
$cmd = "curl -k -v -X POST 'https://serveraddress:8243/?foo=bar' -H 'Authorization: Basic cEZ.....h'";
$result = shell_exec($cmd);
$output = json_decode($result,true);
print_r($output);