如何将 POST 数据发送到虚拟脚本
How can I send POST data to a phantomjs script
我正在使用 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 请求。我正在使用网络服务器模块来公开脚本。
我怀疑 https://github.com/benfoxall/phantomjs-webserver-example/blob/master/server.js 可能有答案,但我不知道足够的javascript来判断是否正在解析post变量:
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 请求吗?
request.post
对象包含 POST 请求的正文。如果你的$postFieldArray
确实是一个数组,那么(至少根据这个答案)PHP 应该对数组进行编码并使用内容类型 对其进行 POST 。实际上,根据PHP文档:x-www-form-urlencoded
将数组传递给CURLOPT_POSTFIELDS会将数据编码为多部分/表单数据,而传递 URL 编码的字符串会将数据编码为 application/x-www-form-urlencoded。
尽管在 API 参考中没有明确说明,但此 GitHub 问题表明 PhantomJS 会将x-www-form-urlencoded
表单的内容公开为request.post
对象的属性。这就是示例中似乎正在发生的事情(request.post.url
指的是表单字段url
)。最简单的检查方法是将request.post
对象记录到控制台,并查看其中的内容。
但是,GitHub 问题也意味着 PhantomJS Web 服务器不支持multipart/form-data
。因此,除非您准备更改为其他 Web 服务器,否则使用 JSON 对数据进行编码可能是最简单的方法。在 PHP 方面:
curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode(json_encode($postFieldArray)));
然后在PhantomJS方面:
var data = JSON.parse(request.post);
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 借助asp.net验证或java脚本对多个文本进行验证
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- Java脚本时间添加
- 不显示带有本地json文件数据的谷歌地图脚本
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 从远程脚本获取用户IP
- 如何根据时间运行不同的脚本
- 如何将字符串值从php页面发送到java脚本页面
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 当脚本由system.js加载时,如何要求('electron')
- HTML标记在脚本标记中工作
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 显示时间的脚本
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 如何将 POST 数据发送到虚拟脚本
- 我如何避免nodejs虚拟机脚本函数调用失去上下文时,调用的函数本身是在上下文中