php, как свернуться, если CURLOPT_POSTFIELDS находится в цикле - PullRequest
0 голосов
/ 31 мая 2018

Я новый разработчик php, теперь проект должен вызывать третью часть API.поэтому я использую функцию CURL, они возвращают XML-файл и все работает нормально, как и ожидалось

Вопрос Мне нужно вызывать API как POST метод, и мне нужно передать значения.поэтому я записал все параметры, как этот

$parameter = array(
        'op_id'        => 'asdasdasdasdads',
        'secret_key'   => 'hahah',
        'product_code' => '1234556',
        'site_code'    => '598',
        'start_date'    => "$start_date",
        'end_date'    => "$end_date"
);

Мне нужно вызывать этот API каждые 30 минут, чтобы я мог поместить файл php в задание CRON.но проблема в том, что мне нужно передать start_date и end_date как переменные.вот так

start:2011-12-22 07:00:00 end:2011-12-22 07:30:00
start:2011-12-22 07:30:00 end:2011-12-22 08:00:00 
start:2011-12-22 08:00:00 end:2011-12-22 08:30:00 
start:2011-12-22 08:30:00 end:2011-12-22 09:00:00

я хочу сделать его динамичным, невозможно, я прихожу к файлу, меняю начальную и конечную дату каждые 30 минут.поэтому я перебираю его

$interval = 1800; // Interval in seconds
$date_first     = "2011-12-22 07:00:00";
$date_second    = "2011-12-22 10:30:00";
$time_first     = strtotime($date_first);
$time_second    = strtotime($date_second);
for ($i = $time_first; $i < $time_second; $i = $i + $interval){
    $start_date = date('Y-m-d H:i:s', $i);
    $end_date = date('Y-m-d H:i:s', $i + $interval );
    $parameter = array(
    'op_id'        => 'asdasdasdasdads',
    'secret_key'   => 'hahah',
    'product_code' => '1234556',
    'site_code'    => '598',
    'start_date'    => "$start_date",
    'end_date'    => "$end_date"  
    );
}  

, если я помещаю весь CURL в цикл for, он работает, но мой IP-адрес сервера может быть заблокирован третьей стороной.потому что он будет вызываться несколько раз, пока работает цикл.

Я положил sleep (), внутри цикла, кажется, не работает, любая идея?или я могу поместить curl вне цикла, но есть ли какие-либо решения / функции, которые я могу использовать, чтобы изменения CURLOPT_POSTFIELDS менялись каждые 30 минут в соответствии с моим циклом?

Заранее признателен, я думал в течение 3 дней

вот моя казнь.

$parameter = array(
    'op_id'        => 'asdasdasdasdads',
    'secret_key'   => 'hahah',
    'product_code' => '1234556',
    'site_code'    => '598',
    'start_date'   => '2011-12-22 07:00:00',
    'end_date'     => '2011-12-22 07:30:00' 
);

$url = "http://www.api.thirdparty.net";
$curl = curl_init();        
curl_setopt ($curl, CURLOPT_URL, $url); 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   
curl_setopt($curl, CURLOPT_HEADER, 0);   
curl_setopt($curl, CURLOPT_POST, 1);   
curl_setopt($curl, CURLOPT_POSTFIELDS, $parameter);   

$output = curl_exec($curl);

if( $output === FALSE ){
    echo "cURL ERRORS " . curl_error($curl);
}

curl_close($curl);    
$xml = simplexml_load_string($output);

1 Ответ

0 голосов
/ 31 мая 2018

Вам не нужно сильно менять свой код.Если вы установите запуск своего задания cron каждые 30 минут, то мой код будет использовать функции date () и strtotime (), чтобы установить начальные и конечные даты для вас, исходя из того, что задание cron выполняется.

Примерно так:

$parameter = array(
    'op_id'        => 'asdasdasdasdads',
    'secret_key'   => 'hahah',
    'product_code' => '1234556',
    'site_code'    => '598',
    'start_date'   => date('Y-m-d H:i:s'),
    'end_date'     => date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . '+ 30 minutes'))
);


$url = "http://www.api.thirdparty.net";
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $parameter);

$output = curl_exec($curl);

if( $output === FALSE ){
    echo "cURL ERRORS " . curl_error($curl);
}

curl_close($curl);
$xml = simplexml_load_string($output);

Единственная проблема, с которой вы можете столкнуться, заключается в том, что используемая дата будет датой часового пояса вашего сервера.Этот часовой пояс может не совпадать с часовым поясом.Если это так, то вы можете изменить часовой пояс на часовой пояс, который вам нужен, чтобы получить правильную дату и время.

Просто добавьте это вверху вашего кода, если вам нужно:

date_default_timezone_set('America/Los_Angeles'); //<---Pick your timezone.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...