微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php Curl发布到PHPBB

我曾经通过我的帐户通过 PHP脚本发布更新到论坛,最近它已经停止工作,我不是100%确定为什么 – curl没有返回错误,除了显示的消息外,一切似乎都没问题.

我发布的电路板已禁用为我的用户设置的洪水限制,我有权发布所需的任何类型的主题

发布即时消息的代码如下(不久前在网上找到 – 次要编辑)

$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,CURLOPT_FOLLOWLOCATION,CURLOPT_COOKIEJAR,"cookie.txt");
$result= curl_exec ($ch);
curl_close ($ch);
$sid1 = explode("sid=",$result);
$sid2 = explode('&',$sid1[1]);
$sid = rtrim(substr($sid2[0],-29),'"');

$purl = url&"posting.PHP?mode=post&f=20&sid=$sid";
var_dump($purl);
$ch1 = curl_init();
curl_setopt($ch1,$purl);
curl_setopt($ch1,1);
curl_setopt ($ch1,CURLOPT_HEADER,false );
curl_setopt($ch1,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="(.*)"\ /\>%',$lastclick);
preg_match('%name="creation_time" value="(.*)"\ /\>%',$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 1\r\npoll 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,$post_fields);
curl_setopt($ch1,"cookie.txt");
$result2= curl_exec ($ch1);
if(curl_errno($ch1))
{
    echo 'Curl error: ' . curl_error($ch1);
}
curl_close ($ch1);
echo $result2;

从这个$result2有来自论坛的输出线程,但提交的消息尚未发布.

我在$result2中登录,没有可见的错误消息.

有什么建议 ?香港专业教育学院检查了sid,form_token,lclick和creation_time,它们似乎都是一样的和正确的.

curl verbose输出

* 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

解决方法

解决了它

post.PHP第49行

if ($cancel || ($current_time - $lastclick < 2 && $submit))

虽然我的用户禁用了泛洪,但我仍然需要坚持2秒的硬编码延迟.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐