serg557
-
Постов
13 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные serg557
-
-
сталкивался со схожей проблемой - решил ее через IdHTTP->Post http://fire-monkey.ru/topic/1747-kodirovka-otveta-servera-na-zagruzku-faila/
после чего WebBrowser->LoadFromStrings(IdHTTP->Response->ResponseText)-пишу по памяти, но примерно так
-
Тема закрыта, решение нашлось благодаря теме в соседней ветке. приведу весь кусок кода- может спасу кому-то день
#include <IdURI.hpp> ... TStringList *SL2= new TStringList; SL2->Clear(); OpenDialog1->Execute(); TIdMultiPartFormDataStream *PostFile= new TIdMultiPartFormDataStream; PostFile->Clear(); PostFile->AddFormField("FileName",ExtractFileName(OpenDialog1->FileName)); PostFile->AddFile("Filedata",OpenDialog1->FileName); PostFile->AddFormField("Upload","Submit Query"); SL2->Text=TIdURI::URLDecode(HTTP1->Post("http://...", PostFile)); Memo1->Text=SL2->Text; PostFile->Free(); SL2->Free(); HTTP1->Request->ContentType="application/x-www-form-urlencoded";
изменение в 11 строке и добавление include
-
Label1->Text=Memo1->Lines->Strings[Memo1->Lines->Count-1];
по крайней мере последняя строка берется так
-
Ну, как промежуточный вариант-сделать мобильный клиент под конкретный сайт:
1.получаешь страницу с помощью get;
2. парсишь ее как нужно (например с помощью .Pos);
3. результаты выводишь в тот же webbrowser (LoadFromStrings);
4.элементы управления выводишь на форму отдельно и обрабатывешь их post запросом;
5. п.3
6. profit
А вот как сделать универсальный вариант - может еще кто подскажет
-
SL2->SaveToFile("1.txt",TEncoding::UTF8); вот так-вид кракозябр меняется
-
вообще в request есть поле Accept-charset
если его заполнить, высока вероятность ответа в нужной кодировке
Пробовал-тогда сервер вообще не отвечает
с TEncodingтоже пробовал -не помогло-неужели нет ничего стандартного?
-
Всем приятного времени суток-столкнулся собственно с проблемой при загрузке файла на сервер ответ выдается в кодировке ISO-8859-1, которая в программе естественно не воспринимается.
TStringList *SL2= new TStringList; SL2->Clear(); OpenDialog1->Execute(); TIdMultiPartFormDataStream *PostFile= new TIdMultiPartFormDataStream; PostFile->Clear(); PostFile->AddFormField("FileName",ExtractFileName(OpenDialog1->FileName)); PostFile->AddFile("Filedata",OpenDialog1->FileName); PostFile->AddFormField("Upload","Submit Query"); SL2->Text=HTTP1->Post("http://...", PostFile); Memo1->Text=SL2->Text; PostFile->Free(); SL2->Free(); HTTP1->Request->ContentType="application/x-www-form-urlencoded";
Отсюда два вопроса: есть ли возможность штатными средствами перекодировать ISO-8859-1 в UTF-8, или как-то изменить кодировку
HTTP1->Request->ContentType="multipart/form-data; boundary= --";
запрос веб-браузера
Цитатаmultipart/form-data; boundary=----WebKitFormBoundarysjyKuBn6c5UVfiFL
Запрос IdHTTP
Цитатаmultipart/form-data; boundary=--------091715182418229
Пример ответа сервера
ЦитатаФайл: Son.of.Sinbads.txt - ÑÑпеÑно загÑÑжен в новоÑÑÑ!
Можно конечно сделать запрос на онлайн сервис - но как -то это
-
Выдавал клиент, но спасибо krapotkin -натолкнул на мысль что компоненты IdTCPClient и IdTCPServer тут не причем и искать дальше.
Нашел компонент - IdHTTP - который действительно неправильно формировал запрос.
А так компоненты IdTCPClient и IdTCPServer полностью адекватно друг с другом связываются.
Так что тема закрыта.
-
а куда дописывать http:\\ ?
-
Вопрос заключается в следующем - есть сервер сделанный в VCL
Server1->DefaultPort=6590 void __fastcall TForm3::Server1Execute(TIdContext *AContext) // на запрос от клиента { TIdIOHandler *a = AContext->Connection->IOHandler; UnicodeString res = a->ReadLn(IndyUTF8Encoding(true)); if (res == "zapros") { if (ListBox1->Items->Strings[0]!="") { a->WriteLn(ListBox1->Items->Strings[0],IndyUTF8Encoding(true)); a->WriteLn(ListBox3->Items->Strings[0],IndyUTF8Encoding(true)); ListBox2->Items->Add("("+AContext->Connection->Socket->Binding->IP+")"+ListBox1->Items->Strings[0]); }
есть клиент написанный на vcl
//порт указан вручную Client1->Host =Edit2->Text; if (Client1->Connected()==false) { try { Client1->Connect(); } catch(...) { ShowMessage("Не удалось подключиться"); } } TIdIOHandler *a = Client1->IOHandler; a->WriteLn("zapros",enUTF8); Edit1->Text=a->ReadLn(enUTF8); Edit5->Text=a->ReadLn(enUTF8); a->Free(); }
рабочий, захотел переложить его на FMX:
Client1->Port=6590; Client1->Host=Edit1->Text; if (Client1->Connected()==false) { try { Client1->Connect(); } catch(...) { Client1->Socket->Close(); ShowMessage("Не удалось подключиться"); } } TIdIOHandler *a = Client1->IOHandler; a->WriteLn("zapros",IndyUTF8Encoding(true)); Edit3->Text=a->ReadLn(IndyUTF8Encoding(true)); Edit5->Text=a->ReadLn(IndyUTF8Encoding(true)); Client1->Socket->Close(); a->Free(); }
выдает ошибку
ЦитатаUnknown protocol
Может подскажет кто-как их помирить? (Сервер переписывать не вариант )
-
-
День добрый!
Ситуация такова:
1. Загружаю вебстраничку в AnsiString - тут все отлично работает как на винде так и под андроид;
2. Пытаюсь ее отпарсить с использованием стандартных методов AnsiString- .Pos(), .SubString(), .Delete(), - на винде все работает - на андроиде -нет.
Вопрос в следующем - чем работать на с текстом - чтобы одинаково работало под андроидом?
Form2->Page=IdHTTP1->Get("http://minfin.com.ua/currency/mb/");
Page.Delete(1,Page.Pos("<td class=\"active\">")+19);Memo1->Text=Page.SubString(1,Page.Pos("<")-1);
Преобразовать Utf8 в cp1251
в Работа с текстом
Опубликовано · Изменено пользователем serg557
Где получили, для чего и как нужно использовать?
Воспользуйтесь сервисом, http://2cyr.com/decode/?lang=ru например, для определения типа кодировки.
Посмотрел-кодировка cp930-это где ж ее можно взять?