我正在使用curl来完成三项任务。也就是说,登录到我的测试站点,转到我们输入文本的表单并获取隐藏的随机session_id
,设置第三个curl请求以发布带有session_id的消息。
但是这里只能执行前两个请求。该消息未发布。
的index.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);
?>
有人能解决问题吗?
答案 0 :(得分:2)
为什么要使用这种笨拙且不可靠的方法来模拟浏览器?怎么会有验证码,或者某些JS,或者其他什么障碍?
您必须使用适用于当前任务的工具,而不是其他任何工具。
您可以使用SOAP,RPC,XML,直接访问数据库,POLL而不是PUSH以及许多其他方法,每种方法都比这种愚蠢的模拟更有用。当然,它需要在服务器端进行一些编程,但这不会成为问题。