我在https://query1.finance.yahoo.com/v8/finance/chart/Ticker使用雅虎财经的API与php的FILE_GET_CONTENTS,并得到"无法打开流:HTTP请求失败!http/1.0 429请求太多",但当我从服务器的命令行使用cURL到相同的URL时,我得到了实际的响应!我验证了这两个请求来自同一个IP.

我发送的请求并不多--昨晚我发送了大约40个GET请求,然后今天我的第一个请求失败了.我的问题是--有没有人看到过同样的问题?我读到的限制是每小时100次请求--这远远低于这个数字!

如有任何建议,我们将不胜感激.

推荐答案

既然您注意到cURL是有效的,那么try 在您的请求中添加一个用户代理来模拟cURL.

<?php

$url = "https://query1.finance.yahoo.com/v8/finance/chart/nvda"; 

$options = [
    'http' => [
        'method' => "GET",
        'header' => "User-Agent: curl/7.68.0\r\n"
    ]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

if ($response !== false) {
    echo "Response: " . $response;
} else {
    echo "Request failed";
}

?>

我在Rust中遇到了同样的问题,并向请求添加了一个类似的用户代理来修复它.您还可以try 使用浏览器用户代理,例如Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36.

Php相关问答推荐

添加自定义Metabox到WooCommerce管理订单,启用HPOS

根据特定运输类别增加WooCommerce购物车总重量

管理员订单列表中的自定义列与WooCommerce 8.6.1一起消失

wp_enqueue_scripts not loading(基于类的插件)

Msgraph-sdk-php v2如何从返回对象中获取数据?

如何将对我的域的请求重定向到子文件夹中的索引,同时保留域URL并使用.htaccess?

在特定订单状态更改时自定义WooCommerce订单发货项目

为什么正则表达式与得到的文本块之前得到的也行?

MULTI UPDATE Laravel为什么只能更新我的第一行

有没有办法为整个PHP应用程序启用严格类型

在Laravel中修改JSON输出

允许在WooCommerce管理订单列表中使用计费邮箱进行搜索

如何在 PHP 中以 hh:mm:ss 格式获取两个 strtotime datetime/s 之间的时间差

Laravel Eloquent:复杂的多对多关系以及缺失关系的默认值

在 Symfony 测试中何时使用 TestCase 而不是 KernelTestCase

Symfony 迁移判断器在我的工作中失控

Laravel Docker 几个数据库

使用循环和引用而不是递归创建分层/父子数组

如何使用先前 SELECT 的结果来 SELECT SQL 数据

如何获取最后一条消息属于 Laravel 中特定用户的对话列表