0

我正在使用 curl 完成三项任务。也就是说,登录我的测试站点,进入我们输入文本的表单并获取隐藏的随机session_id数,设置第三个 curl 请求以发布带有 session_id 的消息。但是这里只能执行前两个请求。该消息未发布。

索引.php

$ch = curl_init();

$url = 'http://webforum.com';

include 'a.php';

$url = 'http://webforum.com/add_message.php';

include 'C.php';

preg_match_all('|name="session_id" value="(.*?)"|',$store,$tks);

$token = $tks[1][0];

$postf = 'session_id='.$token.'&add=mga&text=TAPPOUT&submit=Submit';

include 'c.php';


?>

c.php

$cookie_file_path="cookies.txt";

$agent="Nokia-Communicator-WWW-Browser/2.0 (Geos 3.0 Nokia-9000i)";

$headers[]="Accept: */*";

$headers[]="Connection: Keep-Alive";

curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file_path);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($ch,CURLOPT_USERAGENT,$agent);

curl_setopt($ch,CURLOPT_POST,1);

curl_setopt($ch,CURLOPT_POSTFIELDS,$postf);

 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

 curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file_path);

$store = curl_exec($ch);

?>

谁能找出问题所在?

4

1 回答 1

2

为什么要使用模拟浏览器这种笨拙且不可靠的方法?如果有验证码,或者一些 JS,或者其他任何障碍怎么办?

您必须使用适合您当前任务的工具,而不是其他工具。

您可以使用 SOAP、RPC、XML、直接访问数据库、POLL 代替 PUSH 以及许多其他方法,其中每一种方法都比这种愚蠢的模拟更有用。当然,它需要在服务器端进行一些编程,但这不会成为问题。

于 2013-05-25T09:31:19.623 回答