POST参数里面phantomjs奇怪解析(POST parameters strangely pa

2019-10-18 19:05发布

我用PHP /卷曲的工作,并希望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_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]

在这一点上,脚本挂,我无法看到开发者工具浏览器控制台的任何输出。 你能告诉我如何看对象的内容?

Answer 1:

它看起来像的形式被编码为multipart/form-data ,而不是application/x-www-urlencoded 。 显然PHP执行此时的值CURLOPT_POSTFIELDS是一个数组。 您可以通过增加检查这个console.log(request.headers)到您的调试代码。

不幸的是,它看起来像PhantomJS不支持multipart/form-data 。 如果你不是愿意找另一台Web服务器,最简单的解决办法可能是手动编码使用JSON数据。 我已经修复的错误在我以前的答案 ,并添加一些示例代码。



文章来源: POST parameters strangely parsed inside phantomjs