2011-07-13 2 views
0

Я хочу подражать, используя CURL с PHP, работу веб-сайта, который извлекает данные с помощью AJAX POST.cURL с PHP и JSON

Обычно, когда я просматриваю запросы POST с использованием Firebug, вы увидите пары переменных/значений, но в этом случае вы видите только одну строку JSON. Например.

{"refId":"14536"} 

Есть ли способ имитировать этот запрос с использованием CURL? Я посмотрел на CURL, но насколько я вижу, параметр CURLOPT_POSTFIELDS должен быть строкой запроса, состоящей из одного или нескольких имен/значений.

Вот мой тестовый код с обычным запросом POST с использованием одной пары имя/значение. Я хотел бы изменить его, чтобы сделать это.

$curlOptions = array(
    CURLOPT_RETURNTRANSFER => true,  // return web page 
    CURLOPT_HEADER   => false, // don't return headers 
    CURLOPT_ENCODING  => "",  // handle all encodings 
    CURLOPT_USERAGENT  => "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3", 
    CURLOPT_CONNECTTIMEOUT => 600,  // timeout on connect 
    CURLOPT_TIMEOUT  => 600,  // timeout on response 
    CURLOPT_POST   => true, 
    CURLOPT_POSTFIELDS  => 'var1=113', 
    CURLOPT_URL   => "http://localhost/t4.php" 
); 

$curlCh  = curl_init(); 
curl_setopt_array($curlCh, $curlOptions); 
$fileContents = curl_exec($curlCh); 
$curlErr  = curl_errno($curlCh); 
$curlErrmsg = curl_error($curlCh); 

if($curlErr) echo "CURL ERROR:</b> $curlErr $curlErrmsg"; 
echo $fileContents; //check worked 
curl_close($curlCh); 
+1

Вы пытаетесь сделать это асинхронно внутри уже загруженной странице? Если вы имеете в виду * буквально * имитировать ajax, вам нужно будет использовать Javascript AJAX для создания взаимодействия на стороне клиента. Сценарий на стороне сервера не сможет заменять элементы DOM по требованию без обновления страницы. – DeaconDesperado

+0

@DeaconDesperado. Нет, я просто хочу, чтобы CURL возвращал те же данные, что и AJAX. – spiderplant0

ответ

1

Как о чем-то вроде:

$postData = json_encode(array('refId' => '14536')); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
+0

Чтобы сделать эту пару ключевых значений в json, вы должны использовать синтаксис json_encode (array ('refId' => '14536)); Это устанавливает ассоциативное отношение, а не два отдельных элемента массива. – DeaconDesperado

+0

Его пример: «{« refId »,« 14536 »}», который не является парой ключ-значение, а двумя отдельными записями в словаре. – sagi

+0

@sagi, @DeaconDesperado. Виноват. Я хотел сказать {"refId": "14536"}. Я обновил вопрос. – spiderplant0