У меня возникают проблемы с подключением к общедоступному домену api с Indy Client с использованием Delphi XE.Delphi XE Indy подключается к локальному серверу api, но не к общему серверу api
Я могу успешно подключиться к apache (apache) локального хостинга, но аналогичная попытка удаленного сервера (общедоступного домена) на общедоступном хостинге дает мне запретную ошибку 403.
Я могу получить доступ к тому же общедоступному домену api, используя cURL. Поэтому я исключил все проблемы с правами/брандмауэром на общем сервере хостинга.
function CallService(ServiceID: string;payload:string): string;
var
JsonToSend: TStringStream;
ServerResponse,EndPointURL: string;
LastJSONArray: TStringList;
MyIndy : TIdHTTP;
begin
//Local connection WORKS :)
EndPointURL := 'http://localhost/api/index.php';
//Remote/Public Domain connection FAILS :(
EndPointURL := 'http://example.com/api/index.php';
LastJSONArray := TStringList.Create();
LastJSONArray.Values['service_id'] := ServiceID;
LastJSONArray.Values['payload'] := payload;
JsonToSend := TStringStream.Create(LastJSONArray.Text, TEncoding.UTF8);
MyIndy := TIdHTTP.Create;
try
try
MyIndy.Request.Accept := 'application/json';
MyIndy.Request.ContentType := 'application/json';
MyIndy.Request.ContentEncoding := 'utf-8';
ServerResponse := MyIndy.Post(EndPointURL, JsonToSend);
Result := ServerResponse;
except
on E: EIdHTTPProtocolException do
//status := http.ResponseText;
//code := E.ErrorCode;
if E.ErrorCode = 401 then ShowMessage('You are not authorised!')
else ShowMessage('Poor Connection '+E.Message);
on E: Exception do begin
//do something else
ShowMessage('Poor Connection - B');
end;
end;
finally
MyIndy.Free();
JsonToSend.Free();
LastJSONArray.Free();
end;
end;
Есть ли свойство/установка с компонентом TIdHTTP Инди, что мне нужно установить/настроить перед вызовом общественности апи?
Как выглядит ваш код cURL? 403 означает, что у вас нет доступа к URL-адресу, для этого, вероятно, требуются учетные данные, которые вы не даете 'TIdHTTP'. Вы даете какой-либо cURL? BTW, 'utf-8' не является допустимым значением' Request.ContentEncoding'. Вместо этого вы должны использовать 'Request.Charset', если вообще (вам не нужно указывать кодировку для' application/json'). –
Эй, реми. Я обнаружил, что проблема связана с свойством UserAgent компонента. Кажется, он блокируется хозяином. – davykiash