[英]PHP HTTP 426 - file_get_contents vs. curl
我有一个简单的 PHP 脚本,它将带有一些参数的 GET 请求发送到外部 API,并接收一些 json 数据作为响应。
我为此使用了file_get_contents
,它在过去几个月中一直有效。
例子:
$url = 'https://example.com?param1=xxx¶m2=yyy';
$data = file_get_contents($url);
突然它停止工作并出现以下错误:
failed to open Stream: HTTP request failed!
HTTP1/1 426 Upgrade Required
我将其替换为cURL
并且有效:
function curlGet($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
我的问题是:
file_get_contents
时有没有办法防止这个问题?我认为我服务器上的任何内容都没有改变。 我也在本地测试了它,它有同样的问题/解决方案,所以我猜测外部服务器/API 发生了一些变化。
我正在使用 PHP7。
什么会导致这种行为?
运行服务器的人升级了他们的软件。
这两种方法到底有什么区别?
一种是使用 curl 库,另一种是基于自定义 php-core 的方法。
我应该始终使用 curl 吗?
取决于您的用例。 Curl 更灵活。 您应该使用 Guzzle(一个 http 客户端库)之类的东西。
使用 file_get_contents 时有没有办法防止这个问题?
或许。
$file = file_get_contents(
'http://www.example.com/',
false,
stream_context_create(
[ 'http'=> ['method'=>"GET"]],
['protocol_version' => '1.1' ])
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.