Параметры POST странно анализируются внутри phantomjs

Я работаю с PHP / CURL и хотел бы отправить данные POST на мой скрипт phantomjs, установив массив postfields ниже:

В моем php-контроллере у меня есть:

$data=array('first' => 'John', 'last' => 'Smith'); $url='http://localhost:7788/'; $output = $this->my_model->get_data($url,$data); 

В моей модели php у меня есть:

 public function get_data($url,$postFieldArray) { $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $postFieldArray); curl_setopt($ch, CURLOPT_URL, $url); $output = curl_exec($ch); 

В моем сценарии phantomJS, который я запускаю локально, у меня есть:

 // import the webserver module, and create a server var server = require('webserver').create(); var port = require('system').env.PORT || 7788; console.log("Start Application"); console.log("Listen port " + port); // Create serever and listen port server.listen(port, function(request, response) { // Print some information Just for debbug console.log("We got some requset !!!"); console.log("request method: ", request.method); // request.method POST or GET if(request.method == 'POST' ){ console.log("POST params should be next: "); console.log("POST params: ",request.post); exit; } 

Сначала я запускаю и запускаю скрипт phantomjs (myscript.js) из командной строки, затем запускаю свой php-скрипт.

Выход:

 $ phantomjs.exe myscript.js Start Application Listen port 7788 null We got some requset !!! request method: POST POST params should be next: POST params: ------------------------------e70d439800f9 Content-Disposition: form-data; name="first" John ------------------------------e70d439800f9 Content-Disposition: form-data; name="last" Smith ------------------------------e70d439800f9-- 

Я смущен о выходе. Я ожидал чего-то большего:

 first' => 'John', 'last' => 'Smith 

Может кто-нибудь объяснить, почему это выглядит так? Как я могу проанализировать объект request.post для назначения переменных внутри myscript.js

Редактировать:

Я внесли изменения, которые вы предложили в ответ. Как отправить данные POST в скрипт phantomjs .

Как вы предположили, я изменил кодировку php / curl на

  curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode(json_encode($postFieldArray))); 

В сценарии phantomjs у меня есть:

 if(request.method == 'POST' ){ console.log("POST params should be next: "); console.log(request.headers); var data = JSON.parse(request.post); console.log("POST params: ",data); 

когда я запускаю скрипт из php, я вижу следующее в моей консоли:

 Start Application .... POST params should be next: [object Object] 

На этом этапе скрипт зависает, и я не вижу никакого вывода в консоли браузера dev tools. Можете ли вы посоветовать мне, как увидеть содержимое объекта?

Похоже, что форма кодируется как multipart/form-data а не application/x-www-urlencoded . Очевидно, PHP делает это, когда значение CURLOPT_POSTFIELDS является массивом. Вы можете проверить это, добавив console.log(request.headers) в свой код отладки.

К сожалению, похоже, что PhantomJS не поддерживает multipart/form-data . Если вы не хотите найти другой веб-сервер, самым простым решением, вероятно, будет вручную кодировать данные с помощью JSON. Я исправил ошибку в своем предыдущем ответе и добавил примерный код.