如何将POST数据发送到phantomjs脚本

时间:2013-10-17 04:24:54

标签: javascript post phantomjs

我正在使用PHP / CURL,并希望通过设置下面的postfields数组将POST数据发送到我的phantomjs脚本:

    $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脚本中的POST请求。我正在使用webserver模块来公开脚本。

我怀疑https://github.com/benfoxall/phantomjs-webserver-example/blob/master/server.js可能有答案,但我不知道足够的javascript来判断是否正在解析帖子变量:

var service = server.listen(port, function(request, response) {

if(request.method == 'POST' && request.post.url){
    var url = request.post.url;

    request_page(url, function(properties, imageuri){
        response.statusCode = 200;
        response.write(JSON.stringify(properties)); 
        response.write("\n");   
        response.write(imageuri);
        response.close();
    })

有人可以告诉我如何在这里解析POST请求吗?

1 个答案:

答案 0 :(得分:1)

request.post对象包含POST请求的正文。如果您的$postFieldArray确实是一个数组,那么(至少根据this answer)PHP应该编码数组并使用内容类型x-www-form-urlencoded 将其发布到。实际上,根据PHP documentation

  

将数组传递给CURLOPT_POSTFIELDS会将数据编码为multipart / form-data,而传递URL编码的字符串会将数据编码为application / x-www-form-urlencoded。

虽然API reference中没有明确说明,但此GitHub issue表明PhantomJS会将x-www-form-urlencoded表单的内容公开为request.post对象上的属性。这就是示例中似乎发生的事情(request.post.url指的是表单字段url)。最简单的检查方法是将request.post对象记录到控制台,看看里面有什么。

但是,GitHub问题也暗示PhantomJS网络服务器不支持multipart/form-data。因此,除非您准备更改为其他Web服务器,否则使用JSON对数据进行编码可能最简单。在PHP方面:

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

然后在PhantomJS方面:

var data = JSON.parse(request.post);