私たちのDelphiアプリケーションは、クライアントマシン上のIdFTP経由でプロキシサーバーを使用して私たちのWebサイトに接続しようとしていますが、いつも「タイムアウトしました」というメッセージが表示されます。私はそれを修正する方法を知らない。IdFTP.Ponnect経由での接続
マイコード:
IdFTP1.Host :=Website_address;
IdFTP1.Username :=Website_user;
IdFTP1.Password :=Website_password;
IdFTP1.TransferType:=ftBinary;
IdFTP1.ProxySettings.ProxyType:=fpcmNone;
IdFTP1.ProxySettings.Host :=Proxy_server;
IdFTP1.ProxySettings.Port :=Proxy_port;
IdFTP1.ProxySettings.Username :=Proxy_username;
IdFTP1.ProxySettings.Password :=Proxy_password;
IdFTP1.Connect;
... '読み取りタイムアウトした' 例外を返します。
ウェブで考えられた解決策を見て、以下のさまざまな組み合わせを試したことがあります(機能する組み合わせがあるかもしれませんが、私がやっていることは分かりません):
IdFTP1.IOHandler :=TIdSSLIOHandlerSocketOpenSSL.Create
(IdFTP1);
IdFTP1.UseTLS :=utUseExplicitTLS;
IdFTP1.NATKeepAlive.UseKeepAlive:=True;
IdFTP1.NATKeepAlive.IdleTimeMS :=100000;
IdFTP1.DataPortProtection :=ftpdpsPrivate;
私のマシンではテストできません。新しいバージョンのアプリケーションをコンパイルし、マシンにコピーして、動作しているかどうかを確認する必要があります。
私が知る限り、クライアント側のインストールについては何も複雑ではありません。彼らは私にプロキシのホストアドレスを与えました。プロキシのユーザ名とパスワードは空白です。
アプリケーションの他のビットは、HTTPとプロキシサーバーを経由して同じWebサイトに接続します。これは完全に機能します。だから、私の論理は、それがファイアウォールやそれに類するものではないということです。
IdHTTP1.HandleRedirects :=True;
IdHTTP1.ProxyParams.BasicAuthentication:=True;
IdHTTP1.ProxyParams.ProxyServer :=Proxy_server;
IdHTTP1.ProxyParams.ProxyPort :=Proxy_port;
IdHTTP1.ProxyParams.ProxyUsername :=Proxy_username;
IdHTTP1.ProxyParams.ProxyPassword :=Proxy_password;
私はDelphi XE8を使用しています。
私たちのテスト用に仮想サーバーを作成し、Windows 7 64ビットを実行します。
更新
レミー、これは正しい考えているのですか?私が抱えている問題の1つは、TIdConnectThroughHttpProxyコンポーネントです。これはuses句に入れる必要がありますか?デルファイはそれを認識していません。
var
TempIO : TIdIOHandlerStack;
TempProxy : TIdConnectThroughHttpProxy;
......
TempIO :=TIdIOHandlerStack.Create;
TempProxy :=TIdConnectThroughHttpProxy.Create;
TempProxy.Host :=Proxy_host;
TempIO.TransparentProxy:=TempProxy;
IdFTP1.IOHandler :=TempIO;
IdFTP1.Connect;
アップデート2
明確さのポイント:成功したプロキシサーバーを介してWebサーバに到達しているHTTPリクエストがに行きますFTP要求とは異なるWebアドレス。つまり、両方とも同じプロキシサーバーを経由しますが、宛先アドレスは異なります。ちょうどこれが使用の場合に備えて。
私は今、問題を見つけるためにFiddlerを使ってみましたが、これは素晴らしいアイデアですか?私の理解は、Fiddlerはプロキシサーバーとして機能するので、私は同じ問題に遭遇したかどうかを知ることができると考えました。確かに、接続することはできません。
私の手順を明確にすることが:
実行バイオリン弾き、および「FTP要求をキャプチャ」というボックスをチェック。
私IdHTTPコンポーネントを更新します。
IdHTTP1.ProxyParams.ProxyServer:='127.0.0.1';
IdHTTP1.ProxyParams.ProxyPort :=Fiddler port;
私IdFTPコンポーネントを更新します。
IdFTP1.ProxySettings.Host:='127.0.0.1';
IdFTP1.ProxySettings.Port:=Fiddler port;
は、だから今、私は完全にクライアントの設定を削除した、私はバイオリンを使用して、私のローカルマシンから問題をミラーリングしています私が知る限り。私がFiddlerを使わなければ、すべてがうまくいく。上記のようにFiddlerを使用すると、HTTP要求は正しく機能しますが、FTP要求は接続できません。
これを試して解決するために何ができるかについてのアイデアはありますか?私は間違っているのは本当にばかげたことだと確信しています。
多くの試行錯誤の末、問題はクライアント側で発生していました。上の最初の 'Update'ヘッダの下のコードは正しいもので、HTTPプロキシ経由でFTP経由で接続しようとするとうまくいきます。 'Update 2'の下のテキストは無視してください。 Fiddlerを使ってテストしようとしても全くうまくいきませんでした。私はCCProxyを使いました。これは非常に役に立ちました。もう一度@Remy Lebeauの答えを下さってありがとうございます。 – Alex