Как написать пост на форум

Статус
В этой теме нельзя размещать новые ответы.

Terri.p

Постоялец
Регистрация
23 Ноя 2008
Сообщения
56
Реакции
31
Здравствуйте,
У меня такая задача нужно чтобы скрипт постил в форум на PHPBB в одну единственную тему, я подсмотрел что отправляет браузер и попытался сымитировать тоже ..
Но что-то не хочет работать, в чем грабли, мой код:

PHP:
$host="www.forumbb"; 
$content="subject=&addbbcode18=%23444444&addbbcode20=0&helpbox=Font+size%3A+%5Bsize%3Dx-small%5Dsmall+text%5B%2Fsize%5D&message=Testggggggggggggggg+post+tttt+ffffffff&mode=reply&sid=e6c6d43fe97ea975cc83628e00972d17&t=2&post=Submit"; 
$UserAgent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; uk; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 ;
$Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$refer="www.forumbb/posting.php?mode=reply&t=2"; 
$cookie="phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bs%3A1%3A%222%22%3B%7D; phpbb2mysql_sid=e6c6d43fe97ea975cc83628e00972d17; phpbb2mysql_t=a%3A1%3A%7Bi%3A2%3Bi%3A1233717544%3B%7D"; 
$zap="/posting.php"; 
$get="POST $zap HTTP/1.1\r\nHost: $host\r\nUser-Agent: $UserAgent\r\nAccept: $Accept\r\nAccept-language: ru,uk;q=0.8,en-us;q=0.5,en;q=0.3\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nReferer: $refer\r\nCookie: $cookie\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 191\r\n\r\n$content\r\n"; 
$fp=fsockopen($host,80); 
fwrite($fp,$get); 
fclose($fp);

ЗИ: Если то что я на писал извращение и можно все реализовать проще, то не откажусь от примера.
 
  • Заблокирован
  • #2
сессия каждый раз меняется, а тут не видно что б ты ее получал... похоже написал от болды + перед постом скорее всего надо залогинится на форуме
 
Такие вещи удобно делать с помощью класса snoopy
 
ТС, если ты полностью сюда скопировал то, что пробывал запускать, то проблема, скорее всего, в том, что ты ковычку забыл в конце этой строки:
PHP:
$UserAgent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; uk; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3';

а вообще попробуй дописать перед fclose($fp); такой код(чтобы вывести ответ сервера:(
PHP:
while($ss=fread($fp,4096))
  echo $ss;
и посмотри результат.
 
попробуй курлом, на нем более прозрачно все получается, да и проблем с куками и сессиями не должно быть
 
сессия каждый раз меняется, а тут не видно что б ты ее получал... похоже написал от болды + перед постом скорее всего надо залогинится на форуме

Про сессии я тоже уже догадался.

Добавлено через 20 секунд
Такие вещи удобно делать с помощью класса snoopy

О спасибо сейчас посмотрю …

Добавлено через 45 секунд
Кто-нибудь может показать пример роботы с сессиями?
 
Советую использовать курл. вот примерчик (я его адаптировал под твои переменные:(
PHP:
  $cookie = 'cookies.txt';
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt ($ch, CURLOPT_USERAGENT, $UserAgent);
  curl_setopt ($ch, CURLOPT_REFERER, $referer);
  curl_setopt($ch, CURLOPT_FAILONERROR, 1);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
  curl_setopt ($ch, CURLOPT_URL, $host."/".$content);
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
  $result = curl_exec ($ch);
и в $result получишь результат твоего запроса
 
Советую использовать курл. вот примерчик (я его адаптировал под твои переменные:(
PHP:
  $cookie = 'cookies.txt';
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt ($ch, CURLOPT_USERAGENT, $UserAgent);
  curl_setopt ($ch, CURLOPT_REFERER, $referer);
  curl_setopt($ch, CURLOPT_FAILONERROR, 1);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
  curl_setopt ($ch, CURLOPT_URL, $host."/".$content);
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
  $result = curl_exec ($ch);
и в $result получишь результат твоего запроса

О спасибо побежал пробивать ))
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху