繁体   English   中英

PHP HTTP 426 - file_get_contents 与 curl

[英]PHP HTTP 426 - file_get_contents vs. curl

我有一个简单的 PHP 脚本,它将带有一些参数的 GET 请求发送到外部 API,并接收一些 json 数据作为响应。

我为此使用了file_get_contents ,它在过去几个月中一直有效。

例子:

$url = 'https://example.com?param1=xxx&param2=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;
}

我的问题是:

  • 什么会导致这种行为?
  • 这两种方法到底有什么区别?
  • 我应该始终使用 curl 吗?
  • 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM