Добавить пост из вне

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
oiter
phpBB 1.0.0
Сообщения: 2
Стаж: 18 лет

Добавить пост из вне

Сообщение oiter »

Пытаюсь из Delphi отправить пост на форум, посредством отправки HTTP-запросов.
В версии PHPBB 2.xx все было ОК. Но с переходом на версию 3, не удается это сделать.
Подскажите, как можно это осуществить.

Делал раньше вот так:

Код: Выделить всё

procedure TfrmNewMail.doforumClick;
//отсылка сообщения на форум

  function enc(s: string): string;
  var
    i: integer;
    r: string;
  begin
    r := '';
    for i := 1 to length(s) do
    begin
      if (s[i] in ['0'..'9','a'..'z','A'..'Z','_','-']) then
        r := r + s[i]
      else if s[i] = ' ' then
        r := r + '+'
      else
        r := r + '%' + inttohex(ord(s[i]),2);
    end;
    enc := r;
  end;

var
  r,s,sid: string;

begin
 try
  s := 'login=login&username='+enc('ЛОГИН')+'&password='+enc('ПАРОЛЬ');

  cl.Connect();

  cl.WriteLn('POST /login.php HTTP/1.1');
  cl.WriteLn('Host: host.ru');
  cl.WriteLn('Content-Type: application/x-www-form-urlencoded');
  cl.WriteLn('Content-Length: '+IntToStr(length(s)));
  cl.WriteLn();
  cl.Write(s);

  sid := '';
  while cl.Connected do
  begin
    r := cl.ReadLn;

    if (Copy(r,1,28) = 'Set-Cookie: phpbb2mysql_sid=') then
    begin
      sid := copy(r,29,32);
    end;
    if (r = '') then
      cl.Disconnect;
  end;

  s :=     'subject='+enc(edSubject.Text)+'&';
  s := s + 'addbbcode18=%23444444&addbbcode20=12&helpbox=%CD%E0%EA%EB%EE%ED%ED%FB%E9+%F2%E5%EA%F1%F2%3A+%5Bi%5D%F2%E5%EA%F1%F2%5B%2Fi%5D++%28alt%2Bi%29&';
  s := s + 'message='+enc('Создано оповещение для:')+'%0D%0A';
  if frmEditTarget.mdTarget.RecordCount >0 THEN
       frmEditTarget.mdTarget.First;
  while not frmEditTarget.mdTarget.Eof do
    begin
      s := s + enc(frmEditTarget.mdTargetText.Value) + '%0D%0A';
      frmEditTarget.mdTarget.Next
    end;
  s := s + '%0D%0A' + enc('Сообщение в статистике:') + '%0D%0A';
  s := s + enc(edStat.Text);
  s := s + '%0D%0A' + enc('[b]Оповещение создал '+ps.DataBase.UserName+'[/b]')+'&';

  s := s + 'mode=reply&';
  s := s + 't=4120&';
  s := s + 'post=%CE%F2%EF%F0%E0%E2%E8%F2%FC&';
  s := s + 'sid='+sid;
  cl.Connect();
  cl.WriteLn('POST /posting.php HTTP/1.1');
  cl.WriteLn('User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2) Opera 7.54u1  [en]');
  cl.WriteLn('Host: host.ru');
  cl.WriteLn('Cookie: phpbb2mysql_sid='+sid);
  cl.WriteLn('Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1');
  cl.WriteLn('Accept-Language: en');
  cl.WriteLn('Accept-Charset: windows-1251, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1');
  cl.WriteLn('Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0');
  cl.WriteLn('Content-Type: application/x-www-form-urlencoded');
  cl.WriteLn('Content-Length: '+inttostr(length(s)));
  cl.WriteLn();
  cl.Write(s);

  if cl.Connected then
  begin
    r := cl.ReadLn;
    if (r <> 'HTTP/1.1 200 OK') then ShowMessage('Внимание! Не удалось добавить сообщение в форум.');
  end
  else
    ShowMessage('Внимание! Не удалось добавить сообщение в форум.');  
 except
   on E: Exception do
     dm.ShowError(err_unknown,E.message);
 end;

end;
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 21 год 4 месяца
Откуда: Оренбург (Южный Урал)
Благодарил (а): 24 раза
Поблагодарили: 54 раза

Re: Добавить пост из вне

Сообщение Поручик »

ни xpeнa ceбe. гдe ж ты тyт тaкиx дeльфийцeв нaйдёшь?
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
oiter
phpBB 1.0.0
Сообщения: 2
Стаж: 18 лет

Re: Добавить пост из вне

Сообщение oiter »

Да мне в принципе, подсказать, или на мысль натолкнуть, как хотя бы посредством HTTP-запросов залогиниться.
У меня получается сейчас такая картина: Существует корпоративный форум. Из ПО нашей компании надо выложить какой то объем инфы, только в определенный топик. Так вот на версии 2.хх все прокатывало нормуль, а при переходе на 3.хх, при логине, session id (SID)меняется 2 раза. Вооот.
Вопрос, как залогиниться HTTP-запросами.

Делал в 3.хх так:
Пишу в 80-ый порт следующее

Код: Выделить всё

POST /index.php HTTP/1.1'
Host: board.elt
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Referer: http://board.elt/index.php
Получив ответ, выдираю SID из отклика HTTP-сервера, из этой строки:

Код: Выделить всё

Set-Cookie: phpbb3_44ucc_sid=7f091d851f8cbc5e73acdd18159834a7; expires=Tue, 01-Sep-2009 01:49:02 GMT; path=/; domain=board.elt; HttpOnly
Отправляю запрос в кодировке UTF-8 вида:

Код: Выделить всё

login=login&username=ПОЛЬЗОВАТЕЛЬ&password=ПАРОЛЬ&redirect=index.php&sid=7f091d851f8cbc5e73acdd18159834a7
Приходит страничка с ответом, что я вошел под именем ПОЛЬЗОВАТЕЛЬ. А вот дальше самое интересное. Страничка через 3 сек. делает редирект, меняет SID, потом следующий редирект, снова через 3 сек., и снова меняет SID.

Добавить пост не удается, потому, что страница срубается в ошибку "Невозможно отобразить страницу. Эта страница сейчас недоступна."
И вот я не пойму, как удержать авторизацию. Мож подскажет кто?
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Добавить пост из вне

Сообщение nissin »

Скорей всего проблема с cookies, поискать модуль/библиотеку, которые умеет с ними работать.
Аватара пользователя
Rayden
Former team member
Сообщения: 3739
Стаж: 21 год 2 месяца
Поблагодарили: 44 раза

Re: Добавить пост из вне

Сообщение Rayden »

oiter
1. Прочитай правила, прежде чем писать на форум.
2. Прочитай описание раздела, в котором ты начал тему - "Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!"
Твой вопрос ни к установке, ни к работе форума не имеет отношения. Для разработчиков есть специальный раздел.
Тему переношу, но в следующий раз... :evil:
3. Ошибку в названии исправь сам.
phpBB2 FAQ
phpBB3 FAQ
Аватара пользователя
ZhAN
phpBB 1.2.1
Сообщения: 25
Стаж: 18 лет 2 месяца
Откуда: Киев
Благодарил (а): 2 раза
Поблагодарили: 4 раза

Re: Добавить пост из вне

Сообщение ZhAN »

oiter,
я бы написал простенький скриптик, использующий http://www.phpbbguru.net/community/topic21144.html, и дергал бы его с параметрами из Дельфи.

Вернуться в «Для авторов (phpBB 3.0.x)»