php Curl posting to PHPBB
I used to post updates to a forum though a PHP script though my account, Recently it has stopped working, and im not 100% sure why - there are no errors returned by curl and everything seems to be ok apart from the message appearing.
The board im posting to has disable flood limit set for my user and I have permissions to post what ever type of topic is needed
the code to post im using is the following (found online a while ago - minor edits)
$url = "http://url.co.uk/board/"; $post_fields = 'username=user&password=pass&redirect=&login=Log+in'; $lurl = $url."ucp.php"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$lurl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch,CURLOPT_COOKIEJAR,"cookie.txt"); $result= curl_exec ($ch); curl_close ($ch); $sid1 = explode("sid=",$result); $sid2 = explode('&',$sid1[1]); $sid = rtrim(substr($sid2[0], 0, -29),'"'); $purl = url&"posting.php?mode=post&f=20&sid=$sid"; var_dump($purl); $ch1 = curl_init(); curl_setopt($ch1, CURLOPT_URL,$purl); curl_setopt($ch1,CURLOPT_RETURNTRANSFER,1); curl_setopt ($ch1, CURLOPT_HEADER, false ); curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch1,CURLOPT_COOKIEFILE,"cookie.txt"); $result1= curl_exec ($ch1); curl_close ($ch1); preg_match('%name="form_token" value="(.*)" />%',$result1,$security123); preg_match('%name="lastclick" value="(.*)" />%',$result1,$lastclick); preg_match('%name="creation_time" value="(.*)" />%',$result1,$ctime1); $lclick = explode('" />',$lastclick[1]); $title = "title"; $subject = "subject to post"; $post_fields = array( 'subject' => $title, 'message' => htmlspecialchars_decode($subject), 'icon' => 0, 'poll_title' => "Poll Name", 'poll_option_text' => "poll 1rnpoll 2", 'poll_max_options' => 1, 'poll_length' => 0, 'poll_vote_change' => "on", 'disable_smilies' => 0, 'attach_sig' => 1, 'notify' => 0, 'topic_type' => 2, 'topic_time_limit' => "", 'creation_time' => $ctime1[1], 'lastclick' => $lclick[0], 'form_token' => $security123[1], 'sid' => $sid, 'post' => 'Submit', ); print_r($post_fields); $ch1 = curl_init(); curl_setopt($ch1, CURLOPT_URL,$purl); curl_setopt($ch1, CURLOPT_POST, 1); curl_setopt($ch1, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch1,CURLOPT_RETURNTRANSFER,1); curl_setopt ($ch1, CURLOPT_HEADER, false ); curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch1,CURLOPT_COOKIEFILE,"cookie.txt"); $result2= curl_exec ($ch1); if(curl_errno($ch1)) { echo 'Curl error: ' . curl_error($ch1); } curl_close ($ch1); echo $result2;
From this $result2
has the output threads from the forum, But the message submitted hasnt been posted.
I am logged in ok in $result2 with no error messages visible.
Any suggestions ? ive checked sid, form_token, lclick and creation_time and they all seem to be the same and correct.
curl verbose output
* About to connect() to site.co.uk port 80
* Trying 78.xxx.yyy.zzz... * connected
* Connected to site.co.uk (78.xxx.yyy.zzz) port 80
> POST /board/posting.php?mode=post&f=20 HTTP/1.1
Host: site.co.uk
Accept: */*
Cookie: phpbb3_9g61k_sid=693813912f38db33091212ee14102026; phpbb3_9g61k_k=; phpbb3_9g61k_u=57
Content-Length: 1914
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------2fb596b13df0
< HTTP/1.1 100 Continue
< HTTP/1.1 302 Found
< Date: Wed, 30 Jan 2013 23:21:39 GMT
< Server: Apache/2.2.22 (CentOS)
< Location: http://site.co.uk/board/viewforum.php?f=20
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
* Connection #0 to host site.co.uk left intact
* Issue another request to this URL: 'http://site.co.uk/board/viewforum.php?f=20'
* Disables POST, goes with GET
* Re-using existing connection! (#0) with host site.co.uk
* Connected to site.co.uk (78.xxx.yyy.zzz) port 80
> GET /board/viewforum.php?f=20 HTTP/1.1
Host: site.co.uk
Accept: */*
Cookie: phpbb3_9g61k_sid=693813912f38db33091212ee14102026; phpbb3_9g61k_k=; phpbb3_9g61k_u=57
< HTTP/1.1 200 OK
< Date: Wed, 30 Jan 2013 23:21:39 GMT
< Server: Apache/2.2.22 (CentOS)
< Cache-Control: private, no-cache="set-cookie"
< Expires: 0
< Pragma: no-cache
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
* Connection #0 to host site.co.uk left intact
* Closing connection #0
Solved it
posting.php line 49
if ($cancel || ($current_time - $lastclick < 2 && $submit))
Although flood is disabled for my user there is still a hard coded delay of 2 seconds that i have to stick to.
链接地址: http://www.djcxy.com/p/48544.html上一篇: cURL有时无法工作,并给出空的结果
下一篇: PHP卷曲张贴到PHPBB