Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1383645741
Sign
2013-11-05 14:02
2014.04.27
COM объект на .NET вызов из Delphi


1-1323780356
wp2
2011-12-13 16:45
2014.04.27
странности FindFirst


15-1383590956
KilkennyCat
2013-11-04 22:49
2014.04.27
как работает механизм установления соединения с MySQL?


1-1314088912
malphunction
2011-08-23 12:41
2014.04.27
[Delphi XE] Дочерняя форма НЕ активизировала родительское окно


4-1268994387
QAZ
2010-03-19 13:26
2014.04.27
Определить вставку извлеч. CD DVD





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский