我有一个简单的 PHP 脚本,它将带有一些参数的 GET 请求发送到外部 API,并接收一些 json 数据作为响应。
I used file_get_contents
为此,它在过去几个月中发挥了作用。
Example:
$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;
}
我的问题是:
- 什么会导致这种行为?
- 这两种方法到底有什么区别?
- 我应该总是使用curl吗?
- 使用时有没有办法避免这个问题
file_get_contents
?
我认为我的服务器上的任何内容都没有改变。我也在本地进行了测试,它有相同的问题/解决方案,所以我猜测
外部服务器/API 发生了一些变化。
我正在使用PHP7。
什么会导致这种行为?
运行服务器的人升级了他们的软件。
这两种方法到底有什么区别?
一种是使用curl库,另一种是一些基于自定义php-core的方法。
我应该总是使用curl吗?
取决于您的用例。卷曲更加灵活。您应该使用 Guzzle(一个 http 客户端库)之类的东西。
使用 file_get_contents 时有没有办法防止这个问题?
Maybe.
$file = file_get_contents(
'http://www.example.com/',
false,
stream_context_create(
[ 'http'=> ['method'=>"GET"]],
['protocol_version' => '1.1' ])
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)