Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2010, 03:00   #1
jskorvin
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 16
Вопрос POST на indy HTTP/1.1 404 Not Found

Доброго вам времени суток!
Не понимаю, в какую сторону копать?

Отправляю заполненую форму (данные со снифера)
Код:
MAX_FILE_SIZE=16777216
sesskey=sOaLJSq4Cv
_qf__login_signup_form=1
username=jskorvin
password=1234567	
email=jskorvin@gmail.com
email2=jskorvin@gmail.com
firstname=name
lastname=name2
city=gorod
country=DZ
submitbutton=Сохранить
На форме кнопка и мемо
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sButton, sMemo, IdHTTP, IdCookieManager ;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  data: TstringList;
  http:TidHTTP;
  CM:TIdCookieManager;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin


   // создаем дату под запрос
   data:=TstringList.Create;

   // создаем хттп
   http:=TidHTTP.Create(nil);
   CM:=TIdCookieManager.Create(http);
   http.CookieManager:= CM;
   http.AllowCookies:= true;
   http.HandleRedirects:= true;
   http.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
   http.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7';
   http.Request.AcceptLanguage:='ru,en-us;q=0.7,en;q=0.3';
   http.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7';
   http.Request.Connection:='keep-alive';
   http.Request.ContentType:='application/x-www-form-urlencoded';
   http.Request.Host:='dmitrij.listkom.ru';

data.Add('MAX_FILE_SIZE=16777216');
data.Add('sesskey=sOaLJSq4Cv');
data.Add('_qf__login_signup_form=1');
data.Add('username=jskorvin');
data.Add('password=1234567');
data.Add('email=jskorvin@gmail.com');
data.Add('email2=jskorvin@gmail.com');
data.Add('firstname=name');
data.Add('lastname=name2');
data.Add('city=gorod');
data.Add('country=DZ');
data.Add('submitbutton=Сохранить');


   memo1.Text:=http.Post('http://dmitrij.listkom.ru/moodle/login/signup.php', data);

end;

end.
переводить
Код:
http.HandleRedirects:= false;
Не помогает.

Пытаюсь понять что не нашлось, нот фаунд что?

Примечательно, что если передать неверный параметр
Код:
data.Add('_qf__login_signup_form=2');
Запрос проходит, а с верным - нот фаунд..

П.С. Я понимаю о необходимости получить куки, распарсить параметр сессии и не прошу научить меня писать регилки, прошу помочь разобраться почему правильно сформированый запрос непроходит..
jskorvin вне форума Ответить с цитированием
Старый 06.12.2010, 06:43   #2
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

Юзай TIdMultiPartFormDataStream
XerSon вне форума Ответить с цитированием
Старый 14.12.2010, 13:52   #3
jskorvin
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 16
По умолчанию

Не помогло =(
Я долго бился с проблемой, но не нашел даже намеков, решил что это один из глюков инди..
Позже это же всплыло еще раз, отсылаемое программой полностью идентично отснифаному из браузера, но запрос не уходит. Притом если запороть запрос (изменить данные на неверные не изменяя структуры запроса) все шлется.
Для себя нашел выход в Synapse, вот листинг этого примера:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
HTTP: THTTPSEND;
d: TStringStream;
s:string;
begin
http:= THttpsend.Create;
http.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7';
 HTTP.MimeType:='application/x-www-form-urlencoded';

      d:=TStringStream.Create('');
      d.WriteString('MAX_FILE_SIZE=16777216');
      d.WriteString('&sesskey=sOaLJSq4Cv');
      d.WriteString('&_qf__login_signup_form=1');
      d.WriteString('&username=jskorvin');
      d.WriteString('&password=1234567');
      d.WriteString('&email=jskorvin@formymail.com');
      d.WriteString('&email2=jskorvin@formymail.com');
      d.WriteString('&firstname=name');
      d.WriteString('&lastname=name2');
      d.WriteString('&city=gorod');
      d.WriteString('&country=DZ');
      d.WriteString('&submitbutton=Сохранить');

       HTTP.Document.LoadFromStream(d);

  if HTTP.HTTPMethod('POST','http://dmitrij.listkom.ru/moodle/login/signup.php') then
  begin
  memo1.Lines.LoadFromStream(HTTP.Document);

  end;
end;
Отвечает ошибкой, как и должно быть, сессия в запросе ведь просрочена, но запрос ушел и сайтик его обработал.

Если кто-то столкнулся с этой траблой и нашел решение - отпишите пожалуйста, будет интересно все таки узнать, что это, глюк инди или недостаток опыта у меня.
jskorvin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Indy. HTTP 404 Not found TwiX Работа с сетью в Delphi 6 14.09.2010 02:30
ошибка http/1.1 302 found pesi Работа с сетью в Delphi 2 10.09.2009 20:25
HTTP/1.1 302 Found Crivel Работа с сетью в Delphi 3 24.04.2009 19:15
как убрать сообщение HTTP:404 при использовании IdHTTP(InDy9) Пепел Феникса Работа с сетью в Delphi 18 01.04.2009 19:40