2016-03-17 5 views
1

Я разрабатываю клиент http и выбираю расширение php curl для создания http-запроса. Api нуждается в многомерный json как параметр.отправка многомерных данных JSON через PHP cURL

$jsonData = json_encode($data); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_POST,1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Content-Type: application/json', 
      'Content-Length: ' . strlen($jsonData)) 
    ); 

    $response = curl_exec($ch); 
    curl_close($ch); 

, когда я использую этот фрагмент как один файл сценария и попробовать в PHP CLI это работает, но в Laravel он не работает. Я получаю сообщение об ошибке «Максимальное время выполнения из 60 секунд превышено».

Когда я смотрю StackOverflow большинство примеров использования одномерные JSon объектов,

  • Есть ли какие-либо ограничения в настройках PHP локон о размерах JSon?
  • При поиске ошибки, о которой я упоминал выше, связано с «max_input_time = 60», но когда я меняю это значение на 120 или выше, сообщение об ошибке не изменилось.

  • Я использую laravel рамки и у laravel есть какая-либо конфигурация, связанная с этим.

ответ

0

Вы пробовали использовать http_build_query() вместо json_encode()?

Насколько я знаю, ограничений на размеры json на php curl нет. Я никогда не работал с laravel, хотя

+0

, когда я пытаюсь http_build_query() Я получаю сообщение «строка (41) «Невозможный аргумент: 2016-03-17 12:11:42» от var_dump – ersidam

0

Вы можете переопределить ограничение по времени PHP, используя функцию, указанную ниже в вашем скрипте PHP.

set_time_limit(int $seconds); 

Это должно решить проблему синхронизации запроса через 60 секунд, однако, я бы вопрос, почему запрос занимает так много времени, чтобы начать с.

Для проверки API я обычно использую Google Chrome и расширенный клиент REST, это позволяет создавать и сохранять запросы в браузере. На JSON нет никаких ограничений в отношении многомерных измерений, поскольку я использовал несколько слоев в прошлом.

Я понимаю, что POSTFIELDS ожидает массив поэтому вы можете изменить ваш запрос POSTFIELDS к:

curl_setopt($ch, CURLOPT_POSTFIELDS, 'data='.$jsonData); 

Для Других функций см curl_setopt

+0

Когда я отправляю один и тот же запрос от js, для получения ответа потребовалось 1 секунду, более 60 секунд - проблема, с которой я столкнулся in js I Добавляем заголовок content-type: application/json и отправляем jso n это неправильно в php? Если параметры находятся в urlencoded формате a = b & c = d – ersidam

+0

Тот факт, что он занимает только секунду в JS, но время от PHP, используя Laravel, предполагает, что он наносит какой-то бесконечный цикл. Я бы заподозрил, что поднял лимит до 2 минут, снова увидит, что это тайм-аут. Попробуйте поместить данные JSON как «data =». Urlencode ($ jsonData) и посмотреть, что это делает. –

Смежные вопросы