+ -
当前位置:首页 → 问答吧 → 请问 php curl 如何获取有 ajax 的返回??

请问 php curl 如何获取有 ajax 的返回??

时间:2014-05-25

来源:互联网

请问 php curl 如何获取有 ajax 的返回??

e.g. url = http://abc.com/test.php
test.php
复制内容到剪贴板代码:<div> {ajax content here}</div>
如果直接用 curl 去拎 http://abc.com/test.php
当 ajax 仲未出黎,咁 curl 拎返黎既 result 就冇左 ajax 嗰 d 内容。

试过 file_get_content 都一样。
curl 加埋 set curl_opt cookie 都系咁。
咁有咩方法可以拎埋成版完整内容??



谢谢

作者: yuki~~   发布时间: 2014-05-25

Why?

What is your original requirement?
引用:原帖由 yuki~~ 於 2014-5-4 21:36 发表
请问 php curl 如何获取有 ajax 的返回??

e.g. url = http://abc.com/test.php
test.php
{ajax content here}

如果直接用 curl 去拎 http://abc.com/test.php
当 ajax 仲未出黎,咁 curl 拎返黎既 result ...

作者: a8d7e8   发布时间: 2014-05-26

http://www.php.net/curl

自己爬吓 manual 先啦

作者: skww   发布时间: 2014-05-26

引用:原帖由 yuki~~ 於 2014-5-4 09:36 PM 发表
请问 php curl 如何获取有 ajax 的返回??

e.g. url = http://abc.com/test.php
test.php
{ajax content here}

如果直接用 curl 去拎 http://abc.com/test.php
当 ajax 仲未出黎,咁 curl 拎返黎既 result ...
应该无完美方法。
就算有方法模拟浏览器运行 JavaScript ,也不知要运行多久, AJAX 或动画才会完成。
有些网页的 JavaScript 是一直 run 的。

作者: xianrenb   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-5 12:03 PM 发表
Why?

What is your original requirement?

冇 requirement 的,只系我自己试紧用 php 去 get page。
但发觉如果 d web page 有 d content 系用 ajax,嗰 d content 用 curl 就拎唔到。

下面系段 code
复制内容到剪贴板代码:function GetPage($url)
{
global $__TIMEOUT;
global $__CONNECT_TIMEOUT;
global $__COOKIE_PATH;

//$ch = curl_init();

//curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_TIMEOUT, $__TIMEOUT);
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $__CONNECT_TIMEOUT);
//curl_setopt($ch, CURLOPT_COOKIEJAR, $__COOKIE_PATH);
//curl_setopt($ch, CURLOPT_COOKIEFILE, $__COOKIE_PATH);
//curl_setopt($ch, CURLOPT_COOKIE, $__COOKIE_PATH);

//$data = curl_exec($ch);

//curl_close($ch);

$data = file_get_contents($url);

return $data;
}

作者: yuki~~   发布时间: 2014-05-26

如同以上众人所言. Curl 无此功能也.
引用:原帖由 yuki~~ 於 2014-5-5 19:24 发表


冇 requirement 的,只系我自己试紧用 php 去 get page。
但发觉如果 d web page 有 d content 系用 ajax,嗰 d content 用 curl 就拎唔到。

下面系段 code
function GetPage($url)
{
global $__T ...

作者: a8d7e8   发布时间: 2014-05-26

搵到办法喇

curl 同 file_get_content 都用唔到
要用一个叫 phantom.js

之后响 php 到 exec("phantom.js"); <= 之后再拎返个 output

作者: yuki~~   发布时间: 2014-05-26

谢分享, PhantomJS 好劲啊..... 成个 webkit
引用:原帖由 yuki~~ 於 2014-5-5 21:49 发表
搵到办法喇

curl 同 file_get_content 都用唔到
要用一个叫 phantom.js

之后响 php 到 exec("phantom.js");

作者: a8d7e8   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-5 09:57 PM 发表
谢分享, PhantomJS 好劲啊..... 成个 webkit

php 上那 server 无装 phantom_js.exe 都可用 php exec() 行到 js file?

作者: 烟民比食屎9更贱   发布时间: 2014-05-26

印象中 yuki 兄唔系新手. 只要佢方向正确, 细节就 okay.
引用:原帖由 烟民比食屎9更贱 於 2014-5-6 21:36 发表
php 上那 server 无装 phantom_js.exe 都可用 php exec() 行到 js file?

作者: a8d7e8   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-7 02:12 PM 发表
印象中 yuki 兄唔系新手. 只要佢方向正确, 细节就 okay.

我响 windows 试的。用 Apache2.4 + Visual Studio 2013 + PHP 5.5
做法先写落 temp 再读返 (佢有得直接 return)

Click to view full image
or http://postimg.org/image/cd12zls6x/full/


[ 本帖最后由 yuki~~ 於 2014-5-7 07:46 PM 编辑 ]

作者: yuki~~   发布时间: 2014-05-26

引用:原帖由 yuki~~ 於 2014-5-7 07:41 PM 发表


我响 windows 试的。用 Apache2.4 + Visual Studio 2013 + PHP 5.5
做法先写落 temp 再读返 (佢有得直接 return)

Click to view full image
or http://postimg.org/image/cd12zls6x/full/
htt ...
原来如此!! 但是有一个问题, 唔知你遇唔遇到。就系:
var allChilds = page.evaluate(function(){return document.getElementsBytagName("option");});
var eleValue = page.evaluate(function(allChilds,i){return allChilds.item(i).getAttribute("value");});

当入 arg allChilds 时, 佢会话 allChilds reference error

作者: 烟民比食屎9更贱   发布时间: 2014-05-26

你想做乜呀?

点解唔喺第一个 function() 入面做埋?
先不说 syntax error, evaluate 只可 return primitive type.昨晚我试了试拎 http://news.google.com, page.content 返来的 result 有啲系 relative links, 有啲甚至系 file:// 开头....咁样想喺 browser 睇个 html 就会有问题, 甚至令到个 chrome DoS.....如果只用 DOM 读返就 okay 的. 佢个 technews 例子只系读手机版, 非常 okay.
引用:原帖由 烟民比食屎9更贱 於 2014-5-7 21:28 发表
原来如此!! 但是有一个问题, 唔知你遇唔遇到。就系:
var allChilds = page.evaluate(function(){return document.getElementsBytagName("option");});
var eleValue = page.evaluate(function(allChilds,i){retu ...

作者: a8d7e8   发布时间: 2014-05-26

引用:原帖由 烟民比食屎9更贱 於 2014-5-7 09:28 PM 发表
原来如此!! 但是有一个问题, 唔知你遇唔遇到。就系:
var allChilds = page.evaluate(function(){return document.getElementsBytagName("option");});
var eleValue = page.evaluate(function(allChilds,i){retu ...
你嗰 option 系咪 ajax or javascript set 架 同埋系咪会迟 d 先有 (e.g. 我嗰个 case load 左个 page,佢有中间 d content 系 ajax 再 load 的)???
如果系既,你要过一阵再试,e.g. setInterval 250ms 再 check
如果一 load 就有,咁唔驶用 phantomjs 喇,直接用 simple dom php 去 read 仲方便啦。

[ 本帖最后由 yuki~~ 於 2014-5-8 07:38 PM 编辑 ]

作者: yuki~~   发布时间: 2014-05-26

系喎. 可以直接用其他嘢读返来变 absolute URL 先再用 phantomJS cap 图
一言惊醒梦中人
引用:原帖由 yuki~~ 於 2014-5-8 19:36 发表


你嗰 option 系咪 ajax or javascript set 架 同埋系咪会迟 d 先有 (e.g. 我嗰个 case load 左个 page,佢有中间 d content 系 ajax 再 load 的)???
如果系既,你要过一阵再试,e.g. setInterval 2 ...

作者: a8d7e8   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-8 07:53 PM 发表
系喎. 可以直接用其他嘢读返来变 absolute URL 先再用 phantomJS cap 图
一言惊醒梦中人

phantom 个 sample 有你要既野 page.render

作者: yuki~~   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-8 02:42 PM 发表
你想做乜呀?

点解唔喺第一个 function() 入面做埋?
先不说 syntax error, evaluate 只可 return primitive type.昨晚我试了试拎 http://news.google.com, page.content 返来的 result 有啲系 relati ...
分 2 个 fn 系想 demo 俾各位睇出左咩问题, 原来佢 arg 唔受 object, allChilds 系 option collection object, 佢受唔到, 要用返 document.get...("option"); 才可 return value. 真系好废。仲有, 唔知系 js 问题, 定 phantomjs 问题, for (var i=0; ... i++) 呢种 loop, 如果里面有 Pages = new WebPages() collection, 又系唔受, 佢会话 i undefine! 我 debug 左原来系只受到 i 最后的 value (e.g. i < 60), 咁每个 pages[] 都变为 pages[59], 系 reference 黎! 无得解决!

作者: 烟民比食屎9更贱   发布时间: 2014-05-26

暂时问题系 screen cap 返 phantomjs 个 website background 变咗黑色.......喺 chrome 睇白色.

你讲个 evaluate 净可以 return primitive type 问题 document 有讲, 有方法 workaround 就算啦....

仲有你咪以为佢系 full featured js 先得架..... 人地个 example 都唔系咁做 -_-" 要咁做架大佬 -> evaluate(function(a, b) {}, a, b)
引用:原帖由 烟民比食屎9更贱 於 2014-5-8 20:34 发表
分 2 个 fn 系想 demo 俾各位睇出左咩问题, 原来佢 arg 唔受 object, allChilds 系 option collection object, 佢受唔到, 要用返 document.get...("option"); 才可 return value. 真系好废。仲有, 唔知系 js 问题, ...

作者: a8d7e8   发布时间: 2014-05-26

oh 我讲错咗, 应该系用其他嘢 get 个 html 返来先 translate links 做 absolute 再用 phantomjs open 来 resolve ajax!!
引用:原帖由 yuki~~ 於 2014-5-8 20:27 发表


phantom 个 sample 有你要既野 page.render

作者: a8d7e8   发布时间: 2014-05-26

引用:原帖由 烟民比食屎9更贱 於 2014-5-8 08:34 PM 发表
分 2 个 fn 系想 demo 俾各位睇出左咩问题, 原来佢 arg 唔受 object, allChilds 系 option collection object, 佢受唔到, 要用返 document.get...("option"); 才可 return value. 真系好废。仲有, 唔知系 js 问题, ...
你 le 个 变哂 59 咁似 windows d .bat 要 著 EnableDelayedExpansion

作者: yuki~~   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-8 08:46 PM 发表
暂时问题系 screen cap 返 phantomjs 个 website background 变咗黑色.......喺 chrome 睇白色.

你讲个 evaluate 净可以 return primitive type 问题 document 有讲, 有方法 workaround 就算啦....
...
变白/黑系因为个 page 未 load 好就 cap 左。又或者佢 run page 内的 js 出现问题。evaluate 出到 non primitive type, 因为 check 到 return 后的 object.member! 反而当 arg 入去另一个 evaluate 内就有问题。你写个 evaluate(fn(a,b){},a,b) 一早试过。总之就系好多细细少少的 bug! 呢件野都系唔可以用在要求可靠性强的作业上!

作者: 烟民比食屎9更贱   发布时间: 2014-05-26

等咗廿秒都系黑色喎.......

oh, 原来你都知, sorry 的确系我太武断.
引用:原帖由 烟民比食屎9更贱 於 2014-5-8 21:54 发表
变白/黑系因为个 page 未 load 好就 cap 左。又或者佢 run page 内的 js 出现问题。evaluate 出到 non primitive type, 因为 check 到 return 后的 object.member! 反而当 arg 入去另一个 evaluate 内就有问题。你写 ...

作者: a8d7e8   发布时间: 2014-05-26

你唔会系 fitcat 挂?
引用:原帖由 烟民比食屎9更贱 於 2014-5-8 21:54 发表
变白/黑系因为个 page 未 load 好就 cap 左。又或者佢 run page 内的 js 出现问题。evaluate 出到 non primitive type, 因为 check 到 return 后的 object.member! 反而当 arg 入去另一个 evaluate 内就有问题。你写 ...

作者: a8d7e8   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-8 10:03 PM 发表
等咗廿秒都系黑色喎.......

oh, 原来你都知, sorry 的确系我太武断.

唔关等唔等事。你试下先 page.settings.javascriptEnabled = false; 因为 phantomjs run page 内的 js 好多时有问题。再唔系要试 run 左几次, 系咁的, 应该系 bug

作者: 烟民比食屎9更贱   发布时间: 2014-05-26

page Array() 无法在 for loop 度正确运作, 原来系 js 本身问题。 要用 closure 限制个 var scope

http://stackoverflow.com/questions/13077828/for-loop-in-javascript-outputs-value-only-from-last-iteration

作者: 烟民比食屎9更贱   发布时间: 2014-05-26

都系黑色啊......
复制内容到剪贴板代码:var page = require('webpage').create(),
system = require('system'),
address, output, size;

page.settings.javascriptEnabled = false;

if (system.args.length < 3 || system.args.length > 5) {
console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');
console.log(' paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
phantom.exit(1);
} else {
address = system.args[1];
output = system.args[2];
page.viewportSize = { width: 600, height: 600 };
if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {
size = system.args[3].split('*');
page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
: { format: system.args[3], orientation: 'portrait', margin: '1cm' };
}
if (system.args.length > 4) {
page.zoomFactor = system.args[4];
}
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 20000);
}
});
}
引用:原帖由 烟民比食屎9更贱 於 2014-5-8 23:36 发表
唔关等唔等事。你试下先 page.settings.javascriptEnabled = false; 因为 phantomjs run page 内的 js 好多时有问题。再唔系要试 run 左几次, 系咁的, 应该系 bug

作者: a8d7e8   发布时间: 2014-05-26

无认真思考你讲个问题, 下次要 post code 先得喇
引用:原帖由 烟民比食屎9更贱 於 2014-5-9 02:59 发表
page Array() 无法在 for loop 度正确运作, 原来系 js 本身问题。 要用 closure 限制个 var scope

http://stackoverflow.com/questions/13077828/for-loop-in-javascript-outputs-value-only-from-last-iteration

作者: a8d7e8   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-9 11:03 AM 发表
都系黑色啊......var page = require('webpage').create(),
system = require('system'),
address, output, size;

page.settings.javascriptEnabled = false;

if (system.args.length < 3 || system ...
你 test 既话可以尽量整到最简单黎试。
我试 le 个有野返。
你试边条 link??? 方便讲吗????
复制内容到剪贴板代码:var page = require('webpage').create();

page.onLoadFinished = function ()
{
page.render("test.png");
phantom.exit();
}

page.open("http://news.google.com/");

作者: yuki~~   发布时间: 2014-05-26

http://phantomjs.org

我只系拎佢个 rasterize.js 出来, 改咗少少咋...
引用:原帖由 yuki~~ 於 2014-5-9 19:37 发表


你 test 既话可以尽量整到最简单黎试。
我试 le 个有野返。
你试边条 link??? 方便讲吗????

var page = require('webpage').create();

page.onLoadFinished = function ()
{
page.rend ...

作者: a8d7e8   发布时间: 2014-05-26

用我嗰段 code open http://phantomjs.org cap 到图 ar

作者: yuki~~   发布时间: 2014-05-26

引用:原帖由 a8d7e8 於 2014-5-9 11:03 AM 发表
都系黑色啊......var page = require('webpage').create(),
system = require('system'),
address, output, size;

page.settings.javascriptEnabled = false;

if (system.args.length < 3 || system ...
按优先次序试以下, step by step
1) 先移走个 phantom.exit() , 仲黑的话
2) 移走果 d fomatting 既 code, 用最简单的 .open(url, function(){.render("abc.jpg");}

作者: 烟民比食屎9更贱   发布时间: 2014-05-26

都系黑黑的~

PS. javascript by default is on
复制内容到剪贴板代码:var page = require('webpage').create();

page.open("http://phantomjs.org", function () {
page.render("out.png");
});
引用:原帖由 烟民比食屎9更贱 於 2014-5-9 22:14 发表


按优先次序试以下, step by step
1) 先移走个 phantom.exit() , 仲黑的话
2) 移走果 d fomatting 既 code, 用最简单的 .open(url, function(){.render("abc.jpg");}

作者: a8d7e8   发布时间: 2014-05-26

你都唔用我讲嗰段 code 既。
page.onLoadFinished

作者: 林珍儿   发布时间: 2014-05-26

引用:原帖由 林珍儿 於 2014-5-12 08:19 PM 发表
你都唔用我讲嗰段 code 既。
page.onLoadFinished
唔系好关事, 我都系用page.onLoadFinished , 但有d网真系会黑。好似毒果报个网,cap 10 次有 8 次都系黑的。cap oncc 完全无问题。我怀疑系毒果有 fb plug-in 搞到咁。

[ 本帖最后由 烟民比食屎9更贱 於 2014-5-13 12:35 AM 编辑 ]

作者: 烟民比食屎9更贱   发布时间: 2014-05-26

引用:原帖由 烟民比食屎9更贱 於 2014-5-13 12:31 AM 发表


唔系好关事, 我都系用page.onLoadFinished , 但有d网真系会黑。好似毒果报个网,cap 10 次有 8 次都系黑的。cap oncc 完全无问题。我怀疑系毒果有 fb plug-in 搞到咁。
我无用过 PhantomJS 。
不过看 https://github.com/ariya/phantomjs/issues/11563 , PhantomJS 真的可能有某些图像处理的问题。

作者: xianrenb   发布时间: 2014-05-26

咦睇漏, 你嗰段用 event 系好喎, 唔驶估时间!

但 cap 出来应该白的地方都系黑咗!
引用:原帖由 yuki~~ 於 2014-5-9 20:01 发表
用我嗰段 code open http://phantomjs.org cap 到图 ar
附件 test.png (96.72 KB)

2014-5-13 11:20 AM

captured by pjs

PhantomJS PhantomJS.png (130.73 KB)

2014-5-13 11:20 AM

captured by chrome extension

test.png (96.72 KB)

2014-5-13 11:20 AM

captured by pjs

PhantomJS PhantomJS.png (130.73 KB)

2014-5-13 11:20 AM

captured by chrome extension

作者: a8d7e8   发布时间: 2014-05-26

oh 顶, 原来系 liar's view!!!!!!

我用个 irfanview set 咗 transparent 色用黑色 background!

作者: a8d7e8   发布时间: 2014-05-26

错有错著, 哈哈!!
多谢帮手试!
引用:原帖由 烟民比食屎9更贱 於 2014-5-13 00:31 发表


唔系好关事, 我都系用page.onLoadFinished , 但有d网真系会黑。好似毒果报个网,cap 10 次有 8 次都系黑的。cap oncc 完全无问题。我怀疑系毒果有 fb plug-in 搞到咁。

作者: a8d7e8   发布时间: 2014-05-26