Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
15-1154954506
antonn
2006-08-07 16:41
2006.09.03
ищу музончик...


15-1154674208
syte_ser78
2006-08-04 10:50
2006.09.03
Кто хочет помочь?


15-1155168549
kolj
2006-08-10 04:09
2006.09.03
Как скрить програму в трей ???


2-1155296090
fast2
2006-08-11 15:34
2006.09.03
Как сделать, чтоб можна было двигать дочерней формой...


1-1153476997
dimdi
2006-07-21 14:16
2006.09.03
Структура файла сохраненного Delphi приложен?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский