6

当我使用 curl 库并尝试从 url 获取图像时,我收到 400 bad request 错误。我发现这个问题与编码网址有关。但在我的情况下,它不起作用,因为我的网址 - 它是服务器端图像的路径 - 就像

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 错误。

4

4 回答 4

28

这可能有用吗?

$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);
于 2012-09-09T19:30:03.547 回答
2

您需要使用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 答案

于 2015-01-20T19:43:51.313 回答
0

您不能对整个字符串进行 urlencode,因为这将对斜杠和您需要保持未编码的其他内容进行编码。如果空格是您唯一的问题,则可以这样做:

str_replace(' ', '+', $url);
于 2012-09-09T19:21:26.923 回答
0

使用 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);           
于 2022-01-20T11:50:51.517 回答