首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >FacebookAds\Exception\Exception:连接在10000毫秒后超时

FacebookAds\Exception\Exception:连接在10000毫秒后超时
EN

Stack Overflow用户
提问于 2017-06-25 01:53:20
回答 2查看 1.1K关注 0票数 1

我有一个cron工作,整天从Facebook上非常频繁地提取数据。

每天很多次,我都会收到类似这样的错误:

FacebookAds\Exception\Exception: Connection timed out after 10001 milliseconds in /vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Adapter/CurlAdapter.php:196
Stack trace:
#0 /vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Client.php(204): FacebookAds\Http\Adapter\CurlAdapter->sendRequest(Object(FacebookAds\Http\Request))
#1 /vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Request.php(282): FacebookAds\Http\Client->sendRequest(Object(FacebookAds\Http\Request))
#2 /vendor/facebook/php-ads-sdk/src/FacebookAds/Api.php(151): FacebookAds\Http\Request->execute()
#3 /vendor/facebook/php-ads-sdk/src/FacebookAds/Api.php(193): FacebookAds\Api->executeRequest(Object(FacebookAds\Http\Request))
#4 /vendor/facebook/php-ads-sdk/src/FacebookAds/ApiRequest.php(183): FacebookAds\Api->call('/act_1010015700...', 'GET', Array, Array)
#5 /app/Helpers/FacebookHelper.php(173): FacebookAds\ApiRequest->execute()
#6 /app/Helpers/FacebookHelper.php(271): App\Helpers\FacebookHelper->getInsights('AdAccount', 'act_10100157003...', 'ad', '2017-06-23', '2017-06-23', Array)
#7 /app/Helpers/FacebookHelper.php(360): App\Helpers\FacebookHelper->getReport('AdAccount', 'act_10100157003...', 'ad', '2017-06-23', '2017-06-23', Array)
#8 /app/Console/Commands/CheckWhetherFacebookAdsStartedRunning.php(50): App\Helpers\FacebookHelper->getDashAds('2017-06-23', '2017-06-23')
#9 [internal function]: App\Console\Commands\CheckWhetherFacebookAdsStartedRunning->handle()
#10 /vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#11 /vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#12 /vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#13 /vendor/laravel/framework/src/Illuminate/Container/Container.php(539): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#14 /vendor/laravel/framework/src/Illuminate/Console/Command.php(182): Illuminate\Container\Container->call(Array)
#15 /vendor/symfony/console/Command/Command.php(264): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#16 /vendor/laravel/framework/src/Illuminate/Console/Command.php(167): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#17 /vendor/symfony/console/Application.php(869): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 /vendor/symfony/console/Application.php(223): Symfony\Component\Console\Application->doRunCommand(Object(App\Console\Commands\CheckWhetherFacebookAdsStartedRunning), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 /vendor/symfony/console/Application.php(130): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#20 /vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 /artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 {main}
Level
----------------
ERROR

我看到here in the Facebook APICURLOPT_CONNECTTIMEOUT设置为10秒。

我想试着把超时时间调整到20秒。

如果不编辑该库中的源代码,我就不知道如何更改该值(我绝对不想这样做,因为它将在下一次升级时被覆盖)。

我调用$ad->getInsights($fields, $params, true); (code),然后执行该请求。

如何覆盖Facebook默认使用的Curl选项?

EN

回答 2

Stack Overflow用户

发布于 2019-05-14 02:46:03

在文件中:

/facebook-php-ads-sdk/src/FacebookAds/Http/Adapter/CurlAdapter.php

我改变了:

CURLOPT_CONNECTTIMEOUT => 10

CURLOPT_CONNECTTIMEOUT => 20

到目前为止,它每一次都有效。

票数 1
EN

Stack Overflow用户

发布于 2021-03-16 22:00:25

在2021年仍然有同样的问题,并正在寻找答案。查看@Ryan评论中的问题并检查代码的当前状态。

所以在2021年,有一种“简单”的方法可以做到这一点:

    $api = Api::init($appId, $appSecret, $appToken);
    $opts = $api->getHttpClient()->getAdapter()->getOpts();
    if ($opts instanceof \ArrayObject && $opts->offsetExists(CURLOPT_CONNECTTIMEOUT)) {
        $opts->offsetSet(CURLOPT_CONNECTTIMEOUT, 30);
        $api->getHttpClient()->getAdapter()->setOpts($opts);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44739320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档