yAnTar
yAnTar

Reputation: 4610

Curl returns 400 bad request (url with spaces)

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

Answers (4)

ganji
ganji

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

Alexander Yancharuk
Alexander Yancharuk

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

Wim Molenberghs
Wim Molenberghs

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

Explosion Pills
Explosion Pills

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

Related Questions