FTP-Datei-Upload mit HTTP-Proxy
Gibt es eine Möglichkeit zum hochladen einer Datei auf einen FTP-server, wenn Sie sich hinter einem HTTP-proxy ?
Scheint es, dass das hochladen einer Datei wird nicht unterstützt hinter einem HTTP-Proxy verwenden .Net-Webclient. (http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.proxy.aspx).
Wenn es keinen workaround gibt ? Wenn nicht, kennst du eine gute und freie FTP-Bibliothek, die ich nutzen kann ?
Bearbeiten: Leider habe ich keine FTP-proxy zu verbinden.
Kommentar zu dem Problem - Öffnen
Bist du sicher, dass Ihr Unternehmen nicht über einen FTP-proxy zu?
Ich habe das gleiche problem. Hast du eine Lösung finden?
Und wenn ja, welche Art von Lizenz es war? Eine source-distribution wäre schön.
Wie wäre es einfach mit einem socks5 proxy?
InformationsquelleAutor der Frage Nico | 2008-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im aktiven FTP-Modus, initiiert der server eine Datenverbindung zum client. Wenn der client hinter einem HTTP-proxy, dieser wird offensichtlich nicht funktionieren. Im passiven FTP-Modus ist der Kunde, initiiert sowohl die ursprüngliche und die Daten-verbindungen. Da HTTP-proxies Tunneln können beliebige ausgehende TCP-verbindungen (unter Verwendung der CONNECT-Methode), sollte es möglich sein, Zugriff auf einen FTP-server im passiv-Modus über einen HTTP-proxy.
Den
FtpWebRequest
zu unterstützen scheint, passiv-Modus. Aber ich verstehe nicht, warum herunterladen der Datei-und Verzeichnis-Listen werden unterstützt, in der Erwägung, dass die Datei hochladen, die auch verwendet die gleichen Daten-Verbindung ist nicht.Haben Sie bestätigt, dass
FtpWebRequest
konfiguriert für den passiv-Modus funktioniert nicht über einen HTTP-proxy, über die directory-listings/Datei-download-funktioniert das gut?InformationsquelleAutor der Antwort Alexander
meisten FTP-Proxys, die machen Ihr Ding auf der Verbindung, so dass, wenn Sie hatte KEINE Vertretung, Sie dies tun:
mit einem FTP-proxy, die Sie tun:
ist und es nur funktioniert es dort. Ich bin mit diesem RECHT DIESE ZWEITE (versucht zu Debuggen, etwas) durch ein squid-proxy.
... aber als Sie nicht über ein FTP-proxy....
Haben Sie einen SOCKS-proxy? Das funktioniert vielleicht, aber ich weiß nicht, ob .NET kann es tun. Ansonsten, um ehrlich zu sein, ich denke, Sie sind geklebt! FTP ist eine "merkwürdige" Protokoll, wenn im Vergleich zu HTTP, es hat einen control-Kanal (port 21) und einen Daten-Kanal (oder mehr als eine, auf einem zufälligen port), so gehen über Proxys ist.... Spaß zu sagen die geringste!
InformationsquelleAutor der Antwort Nic Wise
Unserer Rebex FTP/SSL können HTTP-proxy. Es ist nicht kostenlos, aber...
InformationsquelleAutor der Antwort Martin Vobr
Einer Lösung ist, um zu versuchen, Mono-Implementierung von FtpWebRequest. Ich hatte einen Blick auf den source code und es scheint, es wird einfach zu ändern, so dass alle Anschlüsse (Steuerung und Daten) getunnelt über einen HTTP-proxy.
Stellen Sie eine TCP-Verbindung zum HTTP-proxy statt der eigentlichen FTP-server. Dann senden Sie
CONNECT myserver:21 HTTP/1.0
gefolgt von zwei CRLFs (CRLF = \r\n). Wenn der proxy-Server benötigt Authentifizierung, müssen Sie die Verwendung von HTTP/1.1 und auch senden Sie eine proxy-Authentifizierungs-header, die mit den Anmeldeinformationen. Dann müssen Sie Lesen die erste Zeile der Antwort. Wenn es beginnt mit "HTTP/1.0 200
" oder "HTTP/1.1 200
", dann werden Sie (der rest des Codes) kann weiterhin unter Verwendung der Verbindung, als ob es direkt auf den FTP-server.InformationsquelleAutor der Antwort Alexander
Als der .NET framework 4.6.3, die
FtpWebRequest
noch nicht das hochladen von Dateien über HTTP-proxy.Also entweder Sie implementieren müssen, die selber hochladen, oder verwenden Sie eine 3rd-party-FTP-Bibliothek.
Beispielsweise mit WinSCP .NET-assembly, die Sie verwenden können:
Für die Möglichkeiten tje
SessionOptions.AddRawSettings
, siehe raw-Einstellungen.Leichter ist, WinSCP GUI generieren von C# - FTP-code-Vorlage für Sie.
Beachten Sie, dass WinSCP .NET-assembly ist nicht native .NET-Bibliothek. Es ist eher eine dünne .NET wrapper über eine Konsole-Anwendung.
(Ich bin der Autor von WinSCP)
InformationsquelleAutor der Antwort Martin Prikryl
Wenn es einen Weg gibt, für Sie zum hochladen einer Datei per FTP ohne C# dann sollte es auch möglich sein, in C#. Dauert das hochladen über browser oder FTP-client arbeiten?
Die eine FTP-Bibliothek, die ich am meisten mag ist .NET-FTP-Client-Bibliothek.
InformationsquelleAutor der Antwort VVS
Als Alexander sagt, HTTP-Proxy-Server kann beliebigen proxy-Verkehr. Was Sie brauchen, ist ein FTP-Client, der Unterstützung für die Verwendung eines HTTP-Proxy. Alexander ist auch korrekt, funktioniert dies nur im passiven Modus.
Mein Arbeitgeber verkauft, so ein FTP-client, aber es ist eine enterprise-level-Tools, die nur als Teil einer sehr großen Anlage.
Ich bin mir sicher, dass es andere gibt, die besser zu Ihren Bedürfnissen passen.
InformationsquelleAutor der Antwort Darron
Normalen Wege hochladen von content auf eine ftp://- URL über eine HTTP-proxy wäre über eine HTTP PUT-Anfrage. Ein HTTP-proxy fungiert als HTTP<->FTP-gateway beim Umgang mit ftp://URLs, sprechen HTTP an den anfragenden client und FTP auf die angeforderte FTP-server.
Mindestens die Squid-HTTP-Proxy unterstützt, SETZEN Sie " ftp://- URLs, die nicht wissen, was die anderen Proxys zu tun.
Je mehr gemeinsame Weg ist durch den Missbrauch der Methode CONNECT, um esablish-Tunnel über den proxy. Aber das ist oft nicht zulässig, da die Auswirkungen auf die Sicherheit ermöglichen bidirektionale Tunnel über den proxy.
InformationsquelleAutor der Antwort Henrik Nordström
Hallo ich hatte das gleiche Problem - die Auflösung wurde zum erstellen der proxy-Objekt und daraus die defaultcredentials - das sollte in Ordnung sein, sofern Ihre Anwendung ausgeführt worden ist mit einem Netzwerk-account -
Diese behoben das Problem für mich.
InformationsquelleAutor der Antwort miconico
Verdammt diese unfreie Anwendungen und Komponenten!!!
Hier ist mein open-source-C# - code, Datei-uploads, FTP-über-HTTP-proxy.
InformationsquelleAutor der Antwort A. 'Eradicator' Polyakov
Ich habe gerade das gleiche problem hatte.
Mein primäres Ziel war es zu uploaden einer Datei auf einen ftp. Und ich didn ' T Pflege wenn mein traffic würde gehen über proxy oder nicht.
So, ich habe gerade festgelegt, FTPWebRequest.Proxy-Eigenschaft auf null, direkt nach FTPWebRequest.Create(uri).
Und es funktionierte. Ja, ich weiß, diese Lösung ist nicht die größte. Und mehr habe ich nicht bekommen, warum hat es funktioniert. Aber das Ziel ist erreicht, trotzdem.
InformationsquelleAutor der Antwort dvn
Ich bin mir nicht sicher, ob alle HTTP-proxies arbeiten in der gleichen Weise, aber ich schaffte es, zu betrügen uns, indem Sie einfach erstellen Sie eine HTTP-Anforderung zum Zugriff auf Ressourcen auf URI ftp://user:[email protected]/path.
Traurig, erstellen Sie eine Instanz der HttpWebRequest-Klasse, die Sie verwenden sollten WebRequest.Erstellen. Und wenn Sie tun, dass Sie können nicht erstellen Sie eine HTTP-Anforderung für ftp://- schema.
So habe ich ein bisschen nachdenken, zum aufrufen einer nicht-öffentlichen Konstruktor, der das tut:
Können Sie auch andere Methoden wie "LÖSCHEN" für andere Aufgaben.
In meinem Fall, es funktionierte wie ein Charme.
InformationsquelleAutor der Antwort Elephantik
Id nicht wirklich sehen, dass die Verbindung zwischen einem http-proxy-und Upload auf einen ftp-server. Wenn Sie die http-proxy-Klasse, das ist für den Zugriff auf http-Ressourcen durch einen http-proxy. ftp ist ein anderes Protokoll und das ftp-Proxy verwenden ein anderes Protokoll.
InformationsquelleAutor der Antwort Vasil