【问题标题】:Save a image from a URL从 URL 保存图像
【发布时间】:2014-02-12 15:47:24
【问题描述】:

我想使用 PHP 中的 URL 获取一组图像。我试过使用file_get_contentscurl。以下是我尝试使用的代码。

$image = file_get_contents('http://user:pwd@server/directory/images/image1.jpg');
file_put_contents('D:/images/image1.jpg', $image);

$url = 'http://server/directory/images/image1.jpg';
$localFilePath = 'D:/images/image1.jpg';
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_USERPWD, "user:pwd");
$raw = curl_exec($ch);
curl_close ($ch);
if(file_exists($localFilePath)){
    unlink($localFilePath);
}
$fp = fopen($localFilePath,'wb');
fwrite($fp, $raw);
fclose($fp);

在这两种情况下,我都会收到以下错误:

401 - Unauthorized : Access is denied due to invalid credentials.

密码有一个特殊字符。我无法将其更改为普通密码,因为密码策略不允许。

【问题讨论】:

  • 使用file_get_contents() 时,您需要创建一个包含身份验证标头的特殊流上下文。卷曲代码应该没问题。什么是特殊字符?
  • 特殊字符是否转义?
  • 特殊字符是下划线。不确定,如何逃脱它。
  • @hek2mgl 我尝试使用如下上下文。 $context = stream_context_create(array('http' => array('header' => "授权:基本".base64_encode("user:Pwd_123"))));还是一样的错误。

标签: php curl file-get-contents


【解决方案1】:

我没有看到你告诉 CURL 使用 AUTHentication 的地方:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

我认为这也可能是因为您没有使用 cookie,请启用它们:

curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");

【讨论】:

  • 好吧,我试过使用 CURLOPT_USERPWD。但这没有帮助。
  • 将此添加到代码中: curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD,'user:Pwd_123');仍然出现同样的错误。
【解决方案2】:

这一行的等价物是

curl_setopt($ch, CURLOPT_USERPWD, "user:pwd");

这个,你可以换一个试试这个

curl_setopt($ch, CURLOPT_HTTPHEADER, 
      array("Authorization: Basic ".base64_encode("user:pwd")));

// also you can try by changing + / characters into _-

现在进入正题。 Base64 有几个基于 RFC 的实现。例如:RFC3538。不同的库或不同的语言为 base64 编码/解码实现了不同的 RFC。例如,在某些实现中,它使用+/ 字符,而在某些实现中使用_- 字符。

假设您的 curl 发送的授权的 base64 字符串是 xyz+12=,但您的服务器期望该字符串为 xyz_12=。所以它显然会解码失败。

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 2010-10-17
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多