Форум: "Основная";
Текущий архив: 2014.04.27;
Скачать: [xml.tar.bz2];
ВнизОтправить POST-запрос в Windows-1251 в Indy Найти похожие ветки
← →
Виктор М. (2011-12-27 14:52) [0]Как с помощью Indy отправить HTTP POST-запрос на сервер в кодировке Windows-1251?
У меня Delphi XE, здесь все юникодное, и запросы отправляются в UTF-8. А сервер принимает только cp1251.
Отправляю так:
Http := TIdHttp.Create;
try
PostList := TStringList.Create;
try
PostList.Values["login"] := Login;
PostList.Values["password"] := Password;
Stream := TStringStream.Create;
try
Http.Post(Url, PostList, Stream);
finally
Stream.Free;
end;
finally
PostList.Free;
end;
finally
Http.Free;
end;
← →
Медвежонок Пятачок © (2011-12-27 14:55) [1]сделать буфер из ansistring
← →
Виктор М. (2011-12-27 15:08) [2]Не получается. Сделал так:
type
CyrillicString = type AnsiString(1251);
PostList.Values["login"] := Login;
PostList.Values["password"] := Password;
SendStream := TStringStream.Create;
try
CyrillicText := CyrillicString(PostList.Text);
if Length(CyrillicText) > 0 then
SendStream.WriteBuffer(CyrillicText[1], Length(CyrillicText));
Http.Post(Url, SendStream, Stream);
finally
SendStream.Free;
end;
Не работает, проверил на локальном сервере -- приходит пустой $_POST. Что не правильно?
← →
Виктор М. (2011-12-27 15:09) [3]Да, также указал
Http.Request.ContentEncoding := "Windows-1251";
Http.Request.CharSet := "Windows-1251";
Но эффекта ноль.
← →
Медвежонок Пятачок © (2011-12-27 15:11) [4]неправилен твой стрингстрим который работает со string.
← →
Виктор М. (2011-12-27 15:12) [5]
> Медвежонок Пятачок © (27.12.11 15:11) [4]
> неправилен твой стрингстрим который работает со string.
А как надо? Подскажи, поажлуйста.
← →
Медвежонок Пятачок © (2011-12-27 15:13) [6]ансистринг нужен.
← →
Ega23 © (2011-12-27 15:14) [7]
with TMemoryStream.Create do
WriteBuffer(PAnsiChar(s)^, Length(s));
← →
Виктор М. (2011-12-27 15:15) [8]
> Медвежонок Пятачок © (27.12.11 15:13) [6]
> ансистринг нужен.
Заменил на TMemoryStream -- эффекта ноль (
← →
Медвежонок Пятачок © (2011-12-27 15:17) [9]замени тип строки
← →
Медвежонок Пятачок © (2011-12-27 15:18) [10]Не работает, проверил на локальном сервере -- приходит пустой $_POST. Что не правильно?
Стоп.
А при чем здесь вообще 1251/utf?
← →
Виктор М. (2011-12-27 15:19) [11]Сделал так:
var
CyrillicText: AnsiString;
...
PostList := TStringList.Create;
try
PostList.Values["login"] := Login;
PostList.Values["psw"] := Password;
Http.Request.ContentEncoding := "Windows-1251";
Http.Request.CharSet := "Windows-1251";
SendStream := TMemoryStream.Create;
try
CyrillicText := AnsiString(PostList.Text);
SendStream.WriteBuffer(PAnsiChar(CyrillicText)^, Length(CyrillicText));
Http.Post(Url, SendStream, Stream);
finally
SendStream.Free;
end;
finally
PostList.Free;
end;
На сервере все равно оказывается пустой $_POST :(
← →
Медвежонок Пятачок © (2011-12-27 15:20) [12]шикарно.
у него сервер вообще не ловит пост, а чувак бьется с кодировкой.
← →
Виктор М. (2011-12-27 15:21) [13]
> Медвежонок Пятачок © (27.12.11 15:18) [10]
> Не работает, проверил на локальном сервере -- приходит пустой
> $_POST. Что не правильно?Стоп.А при чем здесь вообще 1251/utf?
>
Если вот эту строчку
Http.Post(Url, SendStream, Stream);
меняю на эту:
Http.Post(Url, PostList, Stream);
то приходит все правильно, в $_POST -- логин и пароль. Но в UTF-8
← →
Медвежонок Пятачок © (2011-12-27 15:29) [14]ну так и какой вывод?
в одном случае пост-блок сформировался верно и распознан в твоем похапе.
в другом пост блок инвалидный и не парсится сервером
← →
Виктор М. (2011-12-27 15:31) [15]
> Медвежонок Пятачок © (27.12.11 15:29) [14]
> ну так и какой вывод?в одном случае пост-блок сформировался
> верно и распознан в твоем похапе.в другом пост блок инвалидный
> и не парсится сервером
Да, но почему он инвалидный? Все же правильно вроде.
← →
Медвежонок Пятачок © (2011-12-27 15:40) [16]он невалидный потому что php так решило.
и этого достаточно.
сравнивай оба случая анализируя не $_POST, а php://input
← →
sniknik © (2011-12-27 16:32) [17]поставь
Http.Request.ContentType:= "application/x-www-form-urlencoded";
перед постом
не помню точно но где то в индях встречал прямую зависимость... заполнение только если установлено (версию после откатил, проверить не могу).
> Http.Post(Url, PostList, Stream);
вот кстати посмотри перекрытый метод, там должно быть(было) что-то вроде установки этого параметра, а после вызов того что со стримом...
← →
Виктор М. (2011-12-27 16:56) [18]
> поставь Http.Request.ContentType:= "application/x-www-form-
> urlencoded";перед постомне помню точно но где то в индях
> встречал прямую зависимость... заполнение только если установлено
> (версию после откатил, проверить не могу).
Да, сделал это и помогло, только пришлось еще писать функцию URLEncode для ANSIString. Но все заработало.
Всем большое спасибо за помощь.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2014.04.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c