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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2011, 00:29   #11
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

вот тема была на сайте тоже но это не помогло... http://programmersforum.ru/showthrea...=151831&page=2
cargo29 вне форума Ответить с цитированием
Старый 31.07.2011, 12:41   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Я тебе серьёзно говорю. Начинай включать голову. Что, по-твоему, хранится в TStringList, текст которого ты передаёшь в Post?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.07.2011, 18:43   #13
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Да он же класса TString
cargo29 вне форума Ответить с цитированием
Старый 31.07.2011, 19:12   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что, по-твоему, хранится в TStringList, текст которого ты передаёшь в Post?
А что там у него? Параметры запроса. Верно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2011, 21:33   #15
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream; sl:TStringList; a:string;
begin
ms:=TMemoryStream.Create;
sl:=TStringList.Create;
getDir(0,dir);
Memo2.Text:=IdHTTP1.Get('http://tumen.u-tel.ru/facilities/sms');
Memo2.Text:= Copy(Memo2.Text, Pos('<h1>Отправка SMS', Memo2.Text), POS('Сервис и поддержка',Memo2.Text)-Pos('<h1>Отправка SMS', Memo2.Text));
code_capcha.Text:=Copy(Memo2.Text, Pos('Введите число с картинки',Memo2.Text), Pos('Отложить отправку SMS до', Memo2.Text)-Pos('Введите число с картинки',Memo2.Text));
code_capcha.Text:='http://tumen.u-tel.ru'+Copy(code_capcha.Text, pos('src="',code_capcha.Text)+5,Pos('" alt="captcha"',code_capcha.Text)-pos('src="',code_capcha.Text)-5);
IdHTTP1.Get(code_capcha.Text,ms);
ms.SaveToFile('capcha.jpg');
Image1.Picture.LoadFromFile('capcha.jpg');
ms.Free;
a:=Copy(Memo2.Text, Pos('<INPUT type="hidden" name="formSid" value="', Memo2.Text)+length('<INPUT type="hidden" name="formSid" value="'), Pos('<INPUT type="hidden" name="formS"',Memo2.Text)-Pos('<INPUT type="hidden" name="formSid" value="',Memo2.Text)-length('<INPUT type="hidden" name="formSid" value="')-5);
Edit1.Text:=IdHTTP1.Request.From;
sl.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
sl:TStringList; a:String; ans:AnsiString; us:UTF8String;  
begin
htp:=THTTPSend.Create;
ans:=memo1.Lines.Text;
us:=AnsiToUtf8Ex(ans,CP_UTF8);
a:=Copy(Memo2.Text, Pos('<INPUT type="hidden" name="formSid" value="', Memo2.Text)+length('<INPUT type="hidden" name="formSid" value="'), Pos('<INPUT type="hidden" name="formS"',Memo2.Text)-Pos('<INPUT type="hidden" name="formSid" value="',Memo2.Text)-length('<INPUT type="hidden" name="formSid" value="')-5);
sl:=TStringList.Create();
sl.Add('tebo=h');
sl.Add('action=ins');
sl.Add('mode=insSms');
sl.Add('delay_time=""');
sl.Add('phone_number='+nomer.Text);
sl.Add('formSid='+a);
sl.Add('formS=www1');
sl.Add('phone_post_number='+nomer.text);
sl.Add('message_text='+us);
sl.Add('confirm_code='+capcha.Text);
//str:=TStringStream.Create('tebo=h'+'action=ins'+'mode=insSms'+'delay_time=""'+'phone_number='+nomer.Text+'message_text='+Memo1.Text+'formSid='+a+'formS=www1'+'phone_post_number='+nomer.text+'confirm_code='+capcha.Text);
Memo3.Text:= IdHTTP1.Post('http://tumen.u-tel.ru/facilities/sms',sl);
//тут потом будет проверка ушло сообщение или нет
sl.Free;
end;
Вот код, капча норма загружаеться все нормально и уходит на сайт дело в том что кодировка не катит когда смс приходит.. советовали использовать Synapse но я ним ни когда не работал
cargo29 вне форума Ответить с цитированием
Старый 31.07.2011, 23:26   #16
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

TStrings - это набор строк. Обычных строк. Которые String. Соответственно, никаких UTF8 здесь быть не может. Физически.

Следовательно, есть два варианта:
а). в UTF8 кодирует сам IdHTTP.Post. Но для этого надо ему как-то это указать.
б). кодируете в UTF8 вы, но и передавать тогда вы должны UTF8, а не строки. Кодированная информация - это набор байт, не текст. И Post надо делать на неё.

А вы всё мешаете в кучу - неудивительно, что получается ерунда.

Я не помню, как обстоят дела в Indy с поддержкой варианта а), но вариант б) поддерживается точно - надо использовать перегруженный вариант Post, который принимает набор байт.

P.S. Кажется, в Indy есть что-то вроде IdMultiPartFormDataStream - это насчёт варианта а). И, кстати, может потребоваться URL-encod-ить параметры. Опять же, надо опции IdHTTP смотреть.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.08.2011, 08:36   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
TStrings - это набор строк. Обычных строк. Которые String. Соответственно, никаких UTF8 здесь быть не может. Физически.
Правильно, но в случае с Д2010 где строка юникодивая по умолчанию, так же и набор строк, о которых ты глаголишь, тоже содержит контент в юникоде.
Цитата:
в UTF8 кодирует сам IdHTTP.Post. Но для этого надо ему как-то это указать.
Тоже возможно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2011, 12:09   #18
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Из выше сказангого я ничего не понял ((( windows-1251 можно как то по подробнее??? на счет IdMultiPartFormDataStream видел но пока не работал с ней, хотелось решить вопрос именно с idhttp и StringList
Изображения
Тип файла: jpg Безымянный.JPG (134.6 Кб, 121 просмотров)
cargo29 вне форума Ответить с цитированием
Старый 01.08.2011, 19:47   #19
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Поможете опытные ??? а то уже не один день бошу ломаю с этой кодировкой.... а то ни как разобраться не могу сколько уже статей перечитал
cargo29 вне форума Ответить с цитированием
Старый 01.08.2011, 23:48   #20
SamBellamy
 
Регистрация: 28.06.2008
Сообщений: 6
По умолчанию

код работает под delphi xe, подключи библиотеку HTTPApp для HTTPEncode
Код:

function W1252To1251(const AData: String): String;
var
  S: RawByteString;
  X: Integer;
begin
  SetLength(S, Length(AData));
  for X := 1 to Length(AData) do
    S[X] := AnsiChar(AData[X]);
  SetCodePage(S, 1251, False);
  Result := S;
end;

function TfrmMain.HTTPPost(text, url: string): string;
var
  idhttp: TIdHTTP;
  SS: TStringStream;
begin
  result := '';
  text := 'PostParam=' + HTTPEncode(text);
  ss := TStringStream.Create(text);
  idhttp := TIdHTTP.Create(nil);
  IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
  IdHTTP.HTTPOptions := IdHTTP.HTTPOptions - [hoForceEncodeParams ];
  try
    result := W1252To1251( IdHTTP.Post(url, SS) );
  finally
    idhttp.Free;
  end;
end;

Последний раз редактировалось SamBellamy; 02.08.2011 в 17:58. Причина: немного причесал код
SamBellamy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Word 2010 и Delphi 2010 David023 Мультимедиа в Delphi 1 30.04.2011 15:51
GlScene и Embarcadero Rad Studio 2010 (Delphi 2010) Fiery Fox Мультимедиа в Delphi 4 19.11.2010 21:46
ASCI кодировка (Delphi) VadEr Помощь студентам 2 01.07.2009 00:50
Кодировка в MySQL и Delphi Droid БД в Delphi 2 18.06.2009 00:08
Кодировка Клавиатуры в delphi Neymexa Помощь студентам 2 30.12.2008 19:55