Cでlibcurlを使用してファイルをアップロードしようとしています。データ送信に失敗しています。以下はログメッセージです。
この問題を修正するにはどうすればよいですか?
<250CWDコマンドが成功しました。
EPSV
- データストリームを受動的に接続する<500'EPSV':コマンドが理解されない
- EPSVの使用を無効にする
PASV
xxxxを試しています。*ホストへのルートがありません
ホストに接続できませんでした
接続#0を閉じる
サーバーに接続できませんでした
これは、FTPサーバーがクライアントが接続するための2番目のポートを開くと、クライアント(libcurl)がそのポートに到達できないことを意味します。これは、リクエスト操作を実行する機能をブロックしている途中のファイアウォールまたはその他のネットワーク機器が原因である可能性があります。
別の理由として、FTPサーバーが正しく構成されていない可能性がありますが、他のユーザーに対して機能する場合は、その可能性は低いと思われます。
失敗のもう1つの理由は、EPSVを認識していないアクティブなファイアウォールがあり、それによって混乱して、EPSVを台無しにしてしまうことである可能性があります。CURLOPT_FTP_USE_EPSVを0に設定して、それなしで試してください。
代わりにアクティブなアプローチを試すことができます(これは、ほとんどの古いスタイルのFTPクライアントがデフォルトで行うことです)。これにより、クライアントは代わりにサーバーに接続を要求します。これは、libcurlでCURLOPT_FTPPORTを使用してアクティブ化します。(使用方法の詳細については、ドキュメントを参照してください。)