Пишу постер в форумы, на одном из форумов(движек SMF, simplemachines.org), столкнулся с проблемой: При сабмите сообщения получаю вот такую вот ошибку: 'Your session timedout while posting. Please try to resubmit your message' Пост данные передаю все что соснифал: Code: -----------------------------#boundary# Content-Disposition: form-data; name="topic" 0 -----------------------------#boundary# Content-Disposition: form-data; name="subject" #title# -----------------------------#boundary# Content-Disposition: form-data; name="icon" thumbup -----------------------------#boundary# Content-Disposition: form-data; name="message" #body# -----------------------------#boundary# Content-Disposition: form-data; name="notify" 0 -----------------------------#boundary# Content-Disposition: form-data; name="lock" 0 -----------------------------#boundary# Content-Disposition: form-data; name="goback" 1 -----------------------------#boundary# Content-Disposition: form-data; name="post" Post -----------------------------#boundary# Content-Disposition: form-data; name="additional_options" 0 ----------------------------#boundary# Content-Disposition: form-data; name="sc" #token# -----------------------------#boundary# Content-Disposition: form-data; name="seqnum" #loggedinuser# -----------------------------#boundary#-- Проверял все передается и подставляется как надо, куки юзаются старые, с ними не должно быть проблем, иначе на этапе проверки залогинен или нет уже ругалось бы на session, куки стоят для автологина, долгие, если бы с нми была проблема, не пустил бы форум, а так доходит скрипт до этапа сабмита нормально(т.е. куки принимаются для логина нормально). Промежуток между заходом на форум и постингом небольшой ~15 секунд, т.е. о таймауте не может быть речи. С таким же промежутком через броузер без проблем постится. Может кто то уже сталкивался с подобной проблемой, как ее можно обойти? Вообще для этого движка(SMF), откуда берется этот параметр - 'session', из пост даных или из кукисов, где искать хотя бы..( Уже все перепробовал, но не могу понять что глючит, постинг в еще один форум на таком же движке, нормально работает, этот ни в какую. Буду признателен за любую полезную инфу, если надо еще какие либо подробности, то обязательно скину, только скажите. Сенкс.
Вот функция которая отправляет все: Code: function multi_curl($data, $options = array()) { $curls = array(); $result = array(); $mh = curl_multi_init(); foreach ($data as $id => $param) { //echo "<pre>".print_r($param['headers'], true)."</pre>"; //exit; $curls[$id] = curl_init(); $url = (is_array($param) && !empty($param['url'])) ? $param['url'] : $param; curl_setopt($curls[$id], CURLOPT_URL, $param['url']); curl_setopt ($curls[$id], CURLOPT_USERAGENT, $param['user_agent']); curl_setopt($curls[$id], CURLOPT_HTTPHEADER,$param['headers']); curl_setopt($curls[$id], CURLOPT_REFERER, $param['referer']); curl_setopt($curls[$id], CURLOPT_COOKIEJAR, $param['cookies']); curl_setopt($curls[$id], CURLOPT_COOKIEFILE, $param['cookies']); curl_setopt($curls[$id], CURLOPT_HEADER, 0); curl_setopt($curls[$id], CURLOPT_HTTPPROXYTUNNEL, true); curl_setopt($curls[$id], CURLOPT_PROXY, $param['proxy'][0]); curl_setopt($curls[$id], CURLOPT_PROXYUSERPWD, $param['proxy'][1]); curl_setopt($curls[$id],CURLOPT_FOLLOWLOCATION, true); curl_setopt($curls[$id],CURLOPT_CONNECTTIMEOUT, 120); curl_setopt($curls[$id], CURLOPT_TIMEOUT, 120); curl_setopt($curls[$id], CURLOPT_MAXREDIRS, 10); curl_setopt($curls[$id],CURLOPT_ENCODING,'gzip,deflate'); curl_setopt($curls[$id], CURLOPT_RETURNTRANSFER, 1); //curl_setopt($curls[$id], CURLOPT_VERBOSE, true); if (is_array($param) && !empty($param['post_data'])) { curl_setopt($curls[$id], CURLOPT_POST, 1); curl_setopt($curls[$id], CURLOPT_POSTFIELDS, $param['post_data']); } if (count($options)>0) curl_setopt_array($curls[$id], $options); curl_multi_add_handle($mh, $curls[$id]); } $running = null; do { curl_multi_exec($mh, $running); } while($running > 0); foreach($curls as $id => $c) { if($result[$id] = curl_multi_getcontent($c)) $result[$id] = $result[$id]; else $result[$id] = array(2, curl_errno($curls[$id]), curl_error($curls[$id])); curl_multi_remove_handle($mh, $c); } curl_multi_close($mh); return $result; } Хотя честно говоря хз как код поможет, разве что настройки для cURL видны
Делал где то пол года назад для пхпбб тоже через цурл. Так вот как раз и за промежутка между авторизацией и постингом на неких форумах и не работало. Также стояла задержка 15 или 20сек. Увеличил задержку до 30сек и все стало на свои места.
У тебя оно видимо наоборот ругалось на то что слишком маленький промежуток был между заходом на страницу и сабмитом сообщения, я тут ругается на то что якобы слишком много времени прошло и у 'session' истек срок давности PhpBB к слову проблем не вызывает вообще, нормальный движек..а вот с этим сплошные муки..но форум нужный ( Давно бы забил уже иначе.
Да авторизация проходит успешно, потом скрипт идет на страницу для постинга, собирает оттуда все данные необходимые(name="sc", name="seqnum"), подставляет в пост данные, подставляет тайтл сообщения и тело сообщения(name="subject", name="message"), и отправляет сообщение, вверху оно, только там теги заменяются на данные, там видно, в ответ он должен получить страницу с постом и распарсить тоже, но это уже детали, в ответ он получает такую вот ошибку, как описано выше, и пост не создается.
Какая линейка SMF? Во второй вроде эти параметры, искать их (и все другие) надо в исходном коде страницы; парсить регуляркой.
В пост даных есть один хеш, но я его распаршиваю и подставляю, сейчас немного читаю об этой ошибке, надо в кукисах смотреть, за 'session' насколько я понял они отвечают, потому что только два пути есть откуда скрипт форума данные получает это куки и пост данные. Пост данные я полностью воспроизвожу, получается что только куки остаются.. Есть там еще Java script который в сбе хеш содержит: Code: <script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[ var current_header_ic = false; function shrinkHeaderIC(mode) { smf_setThemeOption("collapse_header_ic", mode ? 1 : 0, null, "5d603eb914cb0c9b519044aa1aa5965c"); document.getElementById("upshrink_ic").src = smf_images_url + (mode ? "/expand.gif" : "/collapse.gif"); document.getElementById("upshrinkHeaderIC").style.display = mode ? "none" : ""; current_header_ic = mode; } // ]]></script> Но наверно не в нем дело, хеш вот такой сам: 5d603eb914cb0c9b519044aa1aa5965c И пост поле такой же хеш содержит: <input type="hidden" name="sc" value="5d603eb914cb0c9b519044aa1aa5965c" /> Но как я и говорил, в пост данные этот хеш подставляется(не конкретно этот, а текущий)
На странице которая грузится перед постингом не нашел этого, а версия какая не знаю, в хедере форума не нашел версии, хз как определить, в футере тоже нету.