Reputation: 4610
When i use curl library and try to get image from url i get 400 bad request error. I founded that problem is with encoding url. But in my case it's not work, because my url - it's path to image on server side - like
http://example.com/images/products/product 1.jpg
I understand that user spaces in name files it's bad practice, but it's not my server and not i created those files.
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, urlencode($url));
echo $ret = curl_exec($ch);
When i use urlencode function - curl return http_code = 0
Updated
$url = str_replace(' ', '+', $url);
doesn't work, server return 404 error.
Upvotes: 6
Views: 46273
Reputation: 854
Using curl has more challenges than other ways. Simply use 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);
Upvotes: -1
Reputation: 14501
You need to use rawurlencode() function:
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, rawurlencode($url));
echo $ret = curl_exec($ch);
rawurlencode() must be always preferred. urlencode() is only kept for legacy use. For more details look at this SO answer.
Upvotes: 2
Reputation: 902
Does this maybe work?
$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);
Upvotes: 30
Reputation: 191749
You can't urlencode the entire string because that will encode the slashes and others that you need to remain unencoded. If spaces are your only problem, this will do:
str_replace(' ', '+', $url);
Upvotes: 0