I use Indy 10.6.2 with Delphi 7.
I must connect to a https server. I use this code :
FIdHTTP := TIdHTTP.Create(nil);
FIdHTTP.HandleRedirects := True;
FIdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
FIdSSL.SSLOptions.Mode := sslmClient;
FIdSSL.SSLOptions.SSLVersions := [sslvTLSv1_1,sslvTLSv1_2];
FIdHTTP.IOHandler := FIdSSL;
FIdHTTP.Request.Clear;
FIdHTTP.Request.ContentType := 'application/json';
FIdHTTP.Response.ContentType := 'application/json';
FIdHTTP.Request.CustomHeaders.Values['Authorization'] := 'Basic xxxxxxx==';
FIdHTTP.Post(zURL, zJsonStreamIn, zJsonStreamOut);
finally
zJSon := zJsonStreamOut.DataString;
end;
we have a proxy on lan : http://proxy-client.xxxxx.fr Port : 8080
I use proxyparams :
FIdHTTP.ProxyParams.ProxyServer := 'http://proxy-client.in.ac-grenoble.fr';
FIdHTTP.ProxyParams.ProxyPort := 8080;
FIdHTTP.ProxyParams.BasicAuthentication := False;
Then I have error 10001 (host not found) but when I dont't use proxyparams, I have 10060.
Do you have any idea please ?
Thank you in advance.
The
TIdHTTP.ProxyParams.ProxyServerproperty expects just a hostname, not a full URL. Change this line:To this instead:
On a side note:
You don't need the following lines, so you should remove them completely:
TIdHTTPhas builtin support forBasicauthentication. Simply set theTIdHTTP.Request.UsernameandTIdHTTP.Request.Passwordproperties as needed, and set theTIdHTTP.Request.BasicAuthorizationproperty toTrue.Also, if you want the response data as a
string,TIdHTTP.Post()has an overload for that purpose:But either way, putting the call to
TIdHTTP.Post()in atry..finallyis good for cleanup, but if an HTTP error occurs, yourzJsonwon't receive any data by default. If you need the response body for HTTP errors, you will need to either:catch the resulting
EIdHTTPProtocolExceptionand assign itsErrorMessageproperty to yourzJsonvariable.enable the
hoNoProtocolErrorExceptionandhoWantProtocolErrorContentflags in theTIdHTTP.HTTPOptionsproperty, thenzJsonwill receive both success and failure response bodies equally.