将远程 JSON 结果写入本地文件

Posted

技术标签:

【中文标题】将远程 JSON 结果写入本地文件【英文标题】:Writing remote JSON result to local file 【发布时间】:2018-02-12 12:02:05 【问题描述】:

我正在使用反向 whois API 来获取注册给特定人员的 JSON 域名数组。我想每 24 小时获取这个数组并将其保存到本地文件中(使用 cron)。如何将 API 中的结果保存到本地文件?

到目前为止,我有这个:

<?php

public function get_url($request_url) 

$curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $request_url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($curl_handle, CURLOPT_TIMEOUT, 0);
    curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);  
    curl_setopt($curl_handle, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
    $JsonResponse = curl_exec($curl_handle);
    $http_code = curl_getinfo($curl_handle);

  return($JsonResponse);



$file = 'cm.json';
file_put_contents($file, mixed get_url("http://api.whoxy.com/?key=apikey&reverse=whois&name=Value+Name"));
?>

我如何让它工作?我对 JSON 和 PHP 的了解有限,能给我一些提示吗?

【问题讨论】:

尝试删除mixed,不知道那在做什么 刚刚注意到这一点:为什么你得到$http_code,然后什么都不做?它不会破坏您的代码,但仍然如此。 甚至尝试完全摆脱 curl,并尝试使用 $json = file_get_contents($url); KIKO,这是为了检查他是否收到了 HTTP 200 响应。不过他没有检查它 @delboy1978uk:我就是这么想的。这将是使用 PHP 的一个很好的论据:如果 API 发生变化,并且不再工作(这将会发生),例如,您可以给自己发送一封电子邮件警告。如果您使用纯 cron/curl,则必须检查日志。 【参考方案1】:

如果是cron,根本不需要使用PHP,只需使用shell命令中的curl即可:

curl --fail "http://api.whoxy.com/?key=apikey&reverse=whois&name=Value+Name" -o cm.json

【讨论】:

有趣,但这不安全吗?例如,如果响应不是 200 怎么办?如果 API 密钥更改了怎么办?等等 您可以使用--fail 标志来避免在非200代码上下载文件。 如果你想让它“安全”,你需要设置某种监控来确保cron作业已经成功运行并且文件已经更新。通常,如果 cronjob 失败,您会在系统上收到一条内部邮件消息。

以上是关于将远程 JSON 结果写入本地文件的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 Angular 7 将 json 数据写入本地 JSON 文件

如何将LINUX远程服务器的日志写入本地的文件里,求大神。。。。在线等

Swift:写入 JSON 并在本地保存到 iPhone 文件

Ansible 使用循环将结果命令写入本地文件

sqlplus客户端将远程结果重定向到本地文件

Ionic 5:如何写入本地 JSON 文件?