Delphi XEを使用してIndy ClientでパブリックドメインAPIに接続する際に問題が発生しています。Delphi XE IndyはローカルサーバーAPIに接続しますが、公開サーバーAPIには接続しません
私は正常に自分のlocalhost Webサーバーapi(apache)に接続できますが、共有ホスティングのリモートサーバー(パブリックドメイン)に対する同様の試みは私に禁止された403エラーを与えます。
私はcURLを使用して同じパブリックドメインapiにアクセスできます。したがって、共有ホスティングサーバー上の権利/ファイアウォールに関する問題は何も除外されました。
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;
公開APIを呼び出す前にTIdHTTP Indyコンポーネントに設定/調整が必要なプロパティ/設定がありますか?
あなたのcURLコードはどのように見えますか? 403はあなたがURLにアクセスできないという意味で、おそらく 'TIdHTTP'に与えていない認証証明書が必要です。あなたは何かをcURLに与えていますか?ところで、 'utf-8'は有効な' Request.ContentEncoding'値ではありません。もし 'application/json'の文字セットを指定する必要がなければ、' Request.Charset'を代わりに使うべきです。 –
ちょっとレミー。私は問題がコンポーネントのUserAgentプロパティであることを発見しました。ホストによってブロックされているようだ。 – davykiash