POST参数在phantomjs中的解析很奇怪[英] POST parameters strangely parsed inside phantomjs

问题描述

我正在使用PHP/curl,并希望通过设置以下"后场数组:

"将帖子数据发送到我的phantomjs脚本.

在我的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

有人可以解释为什么看起来这样吗?我如何解析请求.post对象要分配给myScript.js

内的变量

编辑:

我已经做出了您在答案中建议的更改,如何将发布数据发送到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.显然,当CURLOPT_POSTFIELDS的值为数组时,PHP会这样做.您可以通过在调试代码中添加console.log(request.headers)来检查此内容.

不幸的是,看起来Phantomjs不支持multipart/form-data.如果您不愿意找到另一台Web服务器,最简单的解决方案可能是使用JSON手动编码数据.我已经修复了以前的答案并添加了一些示例代码.

>

本文地址:https://www.itbaoku.cn/post/1740138.html