确实 API:无法打开流:连接被拒绝

Posted

技术标签:

【中文标题】确实 API:无法打开流:连接被拒绝【英文标题】:Indeed API: failed to open stream: Connection refused 【发布时间】:2018-12-14 00:22:54 【问题描述】:

我正在使用 Indeed Job Search API 来检索我的 Laravel 网站上的招聘广告。 我创建了一个命令来填充我的数据库,并且在我的本地环境中一切正常,但在生产环境中却不行。出现这些错误:

- 当我在测试 Curl 访问时:

无法连接到 api.indeed.com 端口 80

- 当我使用 file_get_contents 时:

file_get_contents(http://api.indeed.com/ads/apisearch?publisher=API_KEY&q=fruit+picking&co=au&v=2&latlong=1&fromage=5&limit=10&start=0&format=json&useragent=Mozilla/%2F4.0%28Firefox%29&userip=185.145.156.52):

无法打开流:连接被拒绝

我在 Indeed 网站上的 API 面板中进行了检查,但我无法提供我的网站域,也不知道问题出在哪里。

这是我的代码:

public function handle() 
    $json_string_o = 'http://api.indeed.com/ads/apisearch?publisher=PUBLISHER_API_KEY&q='.$request.'&co=au&v=2&latlong=1&fromage=5&limit=10&start=0&format=json&useragent=Mozilla/%2F4.0%28Firefox%29&userip=185.145.156.52';
    $response = $this->curl_json ($json_string_o);
    $json_data_o = json_decode($response, true);


 public function curl_json ($url)

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

    $content = curl_exec ($ch);

    if(curl_error($ch))
    
        echo 'error:' . curl_error($ch);
     else 
        echo $content;
    

    curl_close ($ch);

    return $content;

有人遇到过 Indeed API 的问题吗?

非常感谢

【问题讨论】:

您的 API 在邮递员或浏览器中是否正常工作?? 是的,两者都能完美搭配 【参考方案1】:

我终于找到了有关我的托管服务提供商问题的解决方案。此答案适用于在 OVH 中托管其网站的人。

如果您尝试从 Laravel 命令调用 API,它将在 localhost 中工作,但在生产环境中不起作用。实际上 OVH 使用白名单进行外部连接以使用 SSH 命令。因此,有两种解决方案:

    控制器中的卷曲

您可以在控制器中使用 Curl 来调用您的 API 并对结果做任何您想做的事情。您还需要定义一个路由来使用您的浏览器访问您的控制器。如果您在定义的地址打开浏览器,它将起作用。

    命令中的卷曲

    创建一个新命令并使用 curl 函数插入代码以从外部源检索数据(在我的情况下确实如此)

    在 Console/Kernel.php 中定义命令

    受保护的 $commands = ['App\Console\Commands\YOURCOMMAND']; 受保护的功能计划(Schedule $schedule) $schedule->command('type:command_name')->everyMinute();

    在您的服务器根目录创建一个名为 schedule-run.php 的新 php 文件

    $_SERVER['argv'] = [ '工匠', '时间表:运行', ];

    需要DIR.'/artisan';

    在您的 OVH 管理面板中定义一个新的 Cron 任务,该任务重定向到 schedule-run.php 文件

您可以在 OVH 中最多每小时运行一次 cron 任务,这就是为什么您需要在调度函数中将频率定义为“每分钟”。

希望它能帮助那些在 OVH 托管网站的人

【讨论】:

【参考方案2】:

尝试添加一个用户代理,这有助于在我卷曲一些东西时为我解决问题。

例如:

$userAgent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';
    curl_setopt($openCurl, CURLOPT_USERAGENT, $userAgent);

【讨论】:

感谢您的回答。我刚刚在 API 文档中看到我需要为 url 提供 'userip' 和 'useragent' 参数。我做到了,但它不起作用。我尝试在 Curl 函数中包含用户代理,但它也不起作用。

以上是关于确实 API:无法打开流:连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

无法打开流或文件:无法打开流:权限被拒绝[重复]

无法打开流或文件:无法打开流:权限被拒绝

“无法打开流或文件“laravel.log”:无法打开流:权限被拒绝”

Laravel 4:无法打开流:权限被拒绝

AWS 中的 Laravel - 无法打开流:权限被拒绝

无法打开流或文件“/app/storage/logs/laravel.log”:无法打开流:权限被拒绝