我有一个大问题。我在jQuery中编写了脚本,它通过构建JSON来获取来自webservice的数据,并通过响应将web服务发送回JSON中。 代码看起来像这样:
function Product(date_from,date_to,API_KEY) {
var self = this;
self.productURI = 'https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate='+date_from+' 00:01 :00&ToDate='+date_to+' 00:01:00';
self.products = new Array();
self.productsDiv = "#products";
self.getAllProducts = function () {
var req = self.pobierz_dane_ajax(self.productURI, "GET");
req.done(function (data) {
self.products = data;
var dataString = JSON.stringify(data);
$.ajax({
type: 'POST',
url: 'write_transactions.php',
data: {
save_transaction: dataString,
date_from: date_from
}
});
});
}
self.pobierz_dane_ajax = function (uri, method, data) {
var request = {
url: uri,
type: method,
contentType: "application/json",
accepts: "application/json",
dataType: 'json',
data: JSON.stringify(data),
crossDomain: true,
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + API_KEY);
}
};
return $.ajax(request);
}
}
我这样称呼我的功能:
<script type="text/javascript">
var product = new Product('<?php echo $date_from; ?>','<?php echo $date_to; ?>','<?PHP echo $DE_API; ?>');
product.getAllProducts();
在PHP脚本中,我用PHP解析JSON并将其写入数据库。
当我通过网页(Chrome,Firefox)调用整个过程时,一切正常。当我在Linux中的crontab中调用它时,问题就出现了:
wget -O - &#39; https ............&#39; 但它只是不起作用。 我需要在后台启动这个脚本,所以我需要更好的解决方案......
答案 0 :(得分:1)
如果我正确理解您的问题,那么
现在你用cget从cron调用网页但它不起作用
原因是,wget只是获取页面并显示HTML响应,但不运行JS脚本!
您可以使用phantomjs而不是wget。它基本上充当无头浏览器,例如可以从cron调用
另一种可能的解决方案是重写一些代码并直接在php脚本中执行所有操作
编辑 - 建议php api调用的解决方案
<?php
$options = array(
'http' => array(
'method' => 'GET',
'header' => array(
'Authorization: Basic ' . $API_KEY,
'Content-type: application/json'
)
)
);
$context = stream_context_create($options);
$response = file_get_contents($API_URL, false, $context);
//work with response / save to db
答案 1 :(得分:0)
Helll是啊!这很容易:D
我正在为其他人发布我的解决方案:D
$remote_url = 'https://api.xxxxxxxxxxxxxx';
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header' => "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents($remote_url, false, $context);
print($file);