Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

indy-компонент tidHttp, ошибка 411 Length Required   Найти похожие ветки 

 
ГостьНомер   (2006-04-15 11:39) [0]

Скажите, в компоненте tIdHTTP нужно вручную указывать параметр Request.ContentLength? Как вообще с ним правильно обращаться? Выполняю такой код:


var
   http:TIdHTTP;
   ssl:TIdSSLIOHandlerSocket;
   Response: TStringStream;
   stringsIn,stringsOut:TStringList;
   stream:TStringStream;
begin
http:=TIdHTTP.create(form1);
ssl:=TIdSSLIOHandlerSocket.Create(http);
Response:=TStringStream.Create("");
ssl.SSLOptions.Method:=sslvTLSv1;
HTTP.port:=443;
http.IOHandler:=ssl;
http.ProxyParams.ProxyPort:=3128;
http.ProxyParams.ProxyServer:="адрес прокси";

stringsIn:=tstringlist.Create;
stringsOut:=tstringlist.Create;

stringsIn.Clear;
stringsOut.Clear;
// stringsIn.add("тут тело запроса");
stringsIn.Add("тело продолжается");
stringsIn.Add("тело продолжается");
...
stringsIn.Add("тело закончилось");
stream:=tstringstream.create(stringsin.Text);

HTTP.Request.ContentType:= "text/plain; charset=Windows-1251";
http.Request.CustomHeaders.Add("тут несколько CustomHeaders");
http.Request.CustomHeaders.Add("тут несколько CustomHeaders");

HTTP.Request.ContentLength:=Length(TStrings(stringsIn).Text);

try
  HTTP.Post("тут URL", stream, Response);
  stringsOut.Text := Response.DataString;
finally
 Response.Free;
end;
stringsIn.Free;
stringsOut.Free;


Пробовал в качестве параметра в http.post передавать TStringStream, TStringList. Пробовал указывать и не указывать ContentLength. Результат всегда один - ошибка 411 Length Required. Как правильно делать? И как следует обрабатывать символы конца строки (сервер ведь может быть на юниксе и принимать конец строки 1 символ \n, если на винде, то два символа \r\n, при этом меняется ContentLength). Delphi 7, Indy 9. Поиск результата не дал.


 
Poirot ©   (2006-04-18 18:32) [1]

Насчёт \n это чётко прописано в спецификации и никаких разчилий не дожно быть - должно быть 2(0xD,0xA) байта между строками запроса и 4(0xD,0xA, 0xD,0xA) до тела запроса или ответ...
А само тело может содержать произволные символы.
ContentLength - он и буит меняться.. вопрос второй, на какой сервер вы кидаете это?! как он понимает то, что пислано в теле запроса?!
ЗЫ: См RFC на предмет 411 ошибки


 
ГостьНомер   (2006-04-20 09:13) [2]

Отвечаю сам: ContentLength указывать не надо. Заработал вариант с параметром типа TStringStream, другие не пробовал.
Косяк был в неправильном URL.


 
Чапаев ©   (2006-04-20 09:26) [3]

По стандарту Content-Length должен быть указан при использовании метода POST.

Ты уверен, что тебе именно POST нужен?



Страницы: 1 вся ветка

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.047 c
15-1155197903
worldmen
2006-08-10 12:18
2006.09.03
Стандарты "MiniDV" и "DVD" и их отличия. Цифровые камеры.


2-1155457358
SamProf
2006-08-13 12:22
2006.09.03
Перечисление результатов IbstoredProc


2-1155105782
Хам
2006-08-09 10:43
2006.09.03
Дерево объектов


2-1155534022
031178
2006-08-14 09:40
2006.09.03
Как отобразить Messagebox поверх всех окон


15-1155281370
pavel_guzhanov
2006-08-11 11:29
2006.09.03
Помогите найти песню