Форум: "Сети";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
Вниз
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.045 c