php Curl发布到PHPBB

exu*_*sum 5 php curl

我曾经通过我的帐户通过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,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 =“标题”;
$ subject =“可以发布”;
$ post_fields =数组(
            '主题'=> $ title,
         'message'=> htmlspecialchars_decode($ subject),
            'icon'=> 0,
'poll_title'=>“投票名称”,
'poll_option_text'=>“投票1 \ r \ npoll 2”,
'poll_max_options'=> 1,
'poll_length'=> 0,
'poll_vote_change'=>“开”,


            '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,
         '发布'=>'提交',

         );
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))
{
    回显“卷曲错误:”。curl_error($ ch1);
}
curl_close($ ch1);
echo $ result2;

从这里$result2有论坛的输出主题,但是提交的消息尚未发布。

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

有什么建议么 ?我检查了sid,form_token,lclick和creation_time,它们似乎都是相同且正确的。

卷曲详细输出

* 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
Run Code Online (Sandbox Code Playgroud)

exu*_*sum 5

解决了

posting.php第49行

if ($cancel || ($current_time - $lastclick < 2 && $submit))
Run Code Online (Sandbox Code Playgroud)

尽管没有为我的用户启用泛洪功能,但我仍然必须坚持2秒的硬编码延迟。