Witam
Potrzebuję użyć metody post żeby przekazać dane do pewnej strony. Jako że nie robiłem tego wcześniej mam wrażenie że trochę błądzę. W zasadzie całość mam już rozpykaną. Pytanie moje dotyczy tego jak trzeba zakodować dane przekazywane do tego post'a.
Mój kod jest taki:
var theIdHTTP : TIdHTTP;
theData : TStringStream;
fIdSSLIOHandlerSocketOpenSSL : TIdSSLIOHandlerSocketOpenSSL;
Begin
Result := '';
theIdHTTP := TIdHTTP.Create(nil);
fIdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
theData := TStringStream.Create(aData);
try
try
theIdHTTP.IOHandler := fIdSSLIOHandlerSocketOpenSSL;
theIdHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
theIdHTTP.Request.Password := aPass;
theIdHTTP.Request.Username := aUser;
theIdHTTP.HTTPOptions := theIdHTTP.HTTPOptions + [hoInProcessAuth];
Result := theIdHTTP.Post(aURL, theData);
except
on E : Exception do
Begin
aErrorMsg := E.Message;
End;
end;
finally
theData.Free;
fIdSSLIOHandlerSocketOpenSSL.Free;
theIdHTTP.Free;
end;
Jako aData przekazuję pewnego strnig'a postaci:
aData := 'zapisz=dodaj&p1=i tutaj tak około 5MB tekstu z różnymi znakami';
Czyli potrzebuję tak naprawdę dwa parametry: zapisz i p1. Nie mogłem zaczaić dlaczego tylko część danych z 5MB się wysyła (wypisywał mi to skrypt PHP). W końcu przenalizowałem te dane i trafiłem że był tam znak '&'. Pogooglowałem trochę, i postanowiłem że zrobię StringReplace('5MB danych', '&', '%26', [rfReplaceAll]) no i zadziałało. Ale coś mi się to nie podoba - pewnie jakieś inne znaki też pasowało by zakodować.
Pytania:
- jakiej funkcji użyć do zakodowania wartości parametrów
- a może ContentType mam źle ustawiony
- a może jest jakaś klasa typu ParamBuilder ?
Z góry dzięki.
b