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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2011, 20:02   #1
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию POST запросы и кодировка. Баянищще

Всем добрый день, я конечно понимаю, что данная тема настолько заезжена, что всех от нее тошнит, но все же второй день бьюсь и не могу решить данную проблему. Прошу не направлять в поиск, так как там был.
итак, я отправляю POST запрос на страницы, кодировка которых win-1251. Если просто заполняю TStringList и отправляю, то вместо русских букв приходят крякозябры: МоскваЗлатоглавая

Пробовал отправить так:
Код:
Var ss:TStringStream;
PostData:TStringList;
Begin
PostData:=TStringList.create;
ss:=TStringStream.Create(s,1251);
    ss.Position:=0;
    ss.WriteString(PostData.Text);
    Form1.IdHTTP1.Post(Posturl, ss);
end;
Так почему то не получается, вообще не происходит регистрация. Сниффер показывает, что POST запрос пустой. Может подскажете где ошибка ?

Последний раз редактировалось kardinal94; 12.07.2011 в 20:12.
kardinal94 вне форума Ответить с цитированием
Старый 13.07.2011, 09:32   #2
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

эээ, а кодировка на 100% win-1251 ??? как то больше похоже, что сервер хочет данные в UTF-8.
1. проверь ContentEncoding
2. попробуй русские данные перед добавлением в PostData конвертнуть AnsiToUTF8()
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 15.07.2011, 20:04   #3
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Блин, ничего не помогает. AnsiToUTF8 в том числе. Может кто-то поможет? Пример страницы - http://antistepler.ru/forum/profile....er&agreed=true
Нужно регистрироваться просто.
kardinal94 вне форума Ответить с цитированием
Старый 15.07.2011, 22:34   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Сниффер показывает, что POST запрос пустой.
попробуй
ss.Position:=0;
ss.WriteString(PostData.Text);
ss.Position:=0;
Form1.IdHTTP1.Post(Posturl, ss);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.07.2011, 22:46   #5
Stalkker247
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 12
Хорошо вот как надо

Код:
procedure TForm1.Button5Click(Sender: TObject);
var
  logParam : TIdMultiPartFormDataStream;
  Data : Tmemorystream;
  CM : TidCookieManager;
  StrPage : String;

begin
    try
    logparam := TIdMultiPartFormDataStream.Create;
    Data:=tmemorystream.Create;
    CM := TidCookieManager.Create(idhttp1);
    idHTTP1.CookieManager:=cm;
    idhttp1.AllowCookies:=true;
    idhttp1.HandleRedirects:=true;

    idhttp1.Request.Host:='site-example.com';
    idhttp1.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0';
    idhttp1.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
    idhttp1.Request.AcceptLanguage:='ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
    idhttp1.Request.AcceptCharSet:='windows-1251';
\\ итак далее.....

    logparam.addformfield('user','yourusername');
    logparam.addformfield('password','yourpass');


    idhttp1.Post('http://site-example.com\login.php',logparam,data);
    data.SaveToFile('1111.txt');
    finally
     logparam.Free;
     data.Free;
     cm.Free;
    end;

end;
В переменную DATA записывается нормальная кодировка
1111.тхт сохраняется в папке с проектом
Stalkker247 вне форума Ответить с цитированием
Старый 16.07.2011, 00:44   #6
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
попробуй
ss.Position:=0;
ss.WriteString(PostData.Text);
ss.Position:=0;
Form1.IdHTTP1.Post(Posturl, ss);
Так тоже пробовал, не получается, все равно POST запрос посылается пустым. Точнее сниффер показывает, что пустой.



Предложенную процедуру переделал так:
Код:
var
  logParam : TIdMultiPartFormDataStream;
  Data : Tmemorystream;
  CM : TidCookieManager;
  StrPage : String;

begin
    try
    logparam := TIdMultiPartFormDataStream.Create;
    Data:=tmemorystream.Create;
    CM := TidCookieManager.Create(idhttp1);
    idHTTP1.CookieManager:=cm;
    idhttp1.AllowCookies:=true;
    idhttp1.HandleRedirects:=true;
    idhttp1.Request.Host:='http://antistepler.ru/';
    idhttp1.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0';
    idhttp1.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
    idhttp1.Request.AcceptLanguage:='ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
    idhttp1.Request.AcceptCharSet:='windows-1251';
    idhttp1.Get('http://antistepler.ru/forum/profile.php?mode=register&agreed=true');
// итак далее.....

  logparam.addformfield('username','hgkdnbhg1467');
logparam.addformfield('email','gignerth1@ra1mbler.ru');
logparam.addformfield('new_password','aues300694');
logparam.addformfield('password_confirm','aues300694');
logparam.addformfield('icq','Нету аська');
logparam.addformfield('aim','');
logparam.addformfield('msn','');
logparam.addformfield('yim','');
logparam.addformfield('website','http://promous.ru');
logparam.addformfield('location','МоскваЗлатоглавая');
logparam.addformfield('occupation','чтото');
logparam.addformfield('interests','привет');
logparam.addformfield('signature','');
logparam.addformfield('viewemail','0');
logparam.addformfield('hideonline','0');
logparam.addformfield('notifyreply','0');
logparam.addformfield('notifypm','0');
logparam.addformfield('popup_pm','0');
logparam.addformfield('attachsig','0');
logparam.addformfield('allowbbcode','0');
logparam.addformfield('allowhtml','0');
logparam.addformfield('allowsmilies','0');
logparam.addformfield('language','0');
logparam.addformfield('timezone','0');
logparam.addformfield('dateformat','D M d, Y G:i');
logparam.addformfield('show_quickreply','1');
logparam.addformfield('quickreply_mode','1');
logparam.addformfield('mode','register');
logparam.addformfield('agreed','true');
logparam.addformfield('coppa','0');
logparam.addformfield('submit','Отправить');

    idhttp1.Post('http://antistepler.ru/forum/profile.php',logparam,data);
    data.SaveToFile('1111.txt');
    finally
     logparam.Free;
     data.Free;
    cm.Free;
    end;

end;
Все равно сниффер показывает пустой запрос. Пустой пост запрос и меня редиректит на http://antistepler.ru/forum/index.php

Последний раз редактировалось kardinal94; 16.07.2011 в 00:49.
kardinal94 вне форума Ответить с цитированием
Старый 21.07.2011, 14:22   #7
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Проблема не решена. Неужели никто не сталкивался с такой проблемой?
kardinal94 вне форума Ответить с цитированием
Старый 21.07.2011, 18:45   #8
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Какая у вас версия Indy?
kangreon вне форума Ответить с цитированием
Старый 21.07.2011, 23:00   #9
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Версия 10-ая.
kardinal94 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GET/POST запросы SsdD Работа с сетью в Delphi 1 08.09.2010 20:24
POST-запрос и кодировка SerjRamone Работа с сетью в Delphi 2 30.08.2010 11:53
Post запросы Скарам Общие вопросы .NET 9 08.08.2010 19:46
Post запросы ElectroMyStyle Фриланс 1 17.12.2009 17:23
idHTTP GET и POST запросы FAiver Работа с сетью в Delphi 64 15.05.2008 13:22