2016-09-19 19 views
0

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コンポーネントに設定/調整が必要なプロパティ/設定がありますか?

+0

あなたのcURLコードはどのように見えますか? 403はあなたがURLにアクセスできないという意味で、おそらく 'TIdHTTP'に与えていない認証証明書が必要です。あなたは何かをcURLに与えていますか?ところで、 'utf-8'は有効な' Request.ContentEncoding'値ではありません。もし 'application/json'の文字セットを指定する必要がなければ、' Request.Charset'を代わりに使うべきです。 –

+0

ちょっとレミー。私は問題がコンポーネントのUserAgentプロパティであることを発見しました。ホストによってブロックされているようだ。 – davykiash

答えて

1

かなりの研究の後、私はIndyナレッジベースで私の問題を解決しました。

http://www.indyproject.org/KB/iamgettinga403forbiddene.htm

Iは、Mozilla/3.0(互換;インディライブラリ)デフォルトから

を私のインディコンポーネントのuserAgentプロパティを変更

、それが動作します!

関連する問題