4 回答
TA贡献1803条经验 获得超3个赞
同一命令的命令行和代码执行有什么区别?
您的用户代理甚至没有关闭:
curl_setopt ($ ch, CURLOPT_USERAGENT, 'Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 79.0.3945.79 Safari / 537.36');
尝试将其设置为真正的 curl-cli 用户代理,例如
curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.63.0');
或者
curl_setopt($ch,CURLOPT_USERAGENT,'curl/'.(curl_version()['version']));
这很罕见,但有可能(甚至有证据表明)他们正在使用用户代理白名单,而 Google Chrome(或者是 Safari?)不在他们的白名单上,但 curl-cli 是......
另一种可能的解释是,他们试图检测并阻止躺在他们的用户代理上的人,并且很容易检测到您在撒谎:您(错误地)说您是 Safari 或 Chrome,以及这两者总是发送Acccept-Encoding: gzip/deflate/whatever
,但你的 curl 请求没有(因为你没有使用 CURLOPT_ENCODING),因此很容易检测到你的用户代理是假的,也许这就是导致阻塞的原因。无论哪种方式,尝试使用真正的 curl 用户代理。
TA贡献1856条经验 获得超17个赞
401 未经授权
403被禁止
这些描述得很糟糕。
401 真的意味着未经过身份验证
403真的意味着未授权
如果这确实是一个受保护的资源,需要登录才能获取它,那么这意味着是的,服务器识别出你(你没有得到 401),但你没有所需的权限(403)。
另一方面,如果图像确实是公开的,则实际粘贴链接可以帮助我们为您提供帮助。
TA贡献1828条经验 获得超3个赞
事实证明,问题很简单。
- 第一个线索是终端中的命令正在运行,但相同的命令shell_exec()
返回错误。
-第二条线索是 delboy1978uk 提到的错误不是 401 not authenticated而是 403 non authorized。
所以一定是 URL 或参数有问题。我打印了 URL,但没有发现错误……长话短说,问题出在 URL 中的特殊字符上。当我打印 URL 时,浏览器&
正确显示了字符,而不是函数将其作为参数&
。
htmlspecialchars_decode()
因此,如果我在运行命令之前提供 URL,那么它可以完美运行。
因此,请注意 URL 中的特殊字符!
TA贡献2003条经验 获得超2个赞
您可以尝试添加
curl_setopt($ch, CURLOPT_POST, 0);
如果这不起作用,您必须在 web.xml 中添加 Apache Tomcat:
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
- 4 回答
- 0 关注
- 148 浏览
添加回答
举报