Главная страница
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.051 c
15-1154854443
Kerk
2006-08-06 12:54
2006.09.03
Проблема с аськой


15-1155181545
QuickFinder
2006-08-10 07:45
2006.09.03
Две операционные системы на одной машине


15-1155113314
DelphiLexx
2006-08-09 12:48
2006.09.03
Нужен русский Help к RxLib


2-1154659052
Яков
2006-08-04 06:37
2006.09.03
Boolean поле


15-1154966122
partizan
2006-08-07 19:55
2006.09.03
Реально реализовать АВЛ-дерево в БД?