Если FTP-прокси позволяет указать всю информацию о цели с помощью команд USER
и PASS
, вы можете использовать свойство Credentials
.
Как правило, вы указываете имя пользователя в форме user@proxyuser@host
и пароль в форме password@proxypassword
:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@proxyuser@host", "password@proxypassword");
Если прокси не требует аутентификации, используйте форму user@host
и password
:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@host", "password");
Но ваш прокси-сервер может также потребовать другого синтаксиса, например:
USER
команд для прокси-сервера пользователь и целевой пользователь хоста OPEN
команда SITE
команда В этих случаях вы не можете использовать FtpWebRequest
. Вы должны использовать стороннюю FTP-клиентскую библиотеку.
Например, с помощью WinSCP .NET assembly вы можете использовать:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "host",
UserName = "user",
Password = "password",
};
// Configure proxy
sessionOptions.AddRawSettings("ProxyHost", "proxy");
sessionOptions.AddRawSettings("FtpProxyLogonType", "2");
sessionOptions.AddRawSettings("ProxyUsername", "proxyuser");
sessionOptions.AddRawSettings("ProxyPassword", "proxypassword");
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Your code
}
Для параметров для SessionOptions.AddRawSettings
, см. исходные настройки .
Легче настроить параметры прокси-сервера в графическом интерфейсе WinSCP и он создает для вас код кода FTP C # .
Обратите внимание, что сборка WinSCP .NET не является родной библиотекой .NET. Это довольно тонкая оболочка .NET поверх консольного приложения.
(я автор WinSCP)
Общее решение состоит в том, чтобы изменить shebang на
#!/usr/bin/env python2.6
. Затем просто установите ваш PATH, чтобы указать на правый python2.6 на каждой машине.
Мы можем сделать:
#!/bin/bash
"exec" "python" "$0"
print "Hello World"
Записать сценарий оболочки оболочки. Если у вас есть script.py
, напишите script.py.sh
со следующим содержимым:
#!/bin/bash
PYTHON_SCRIPT=$( echo "$0" | sed -e 's/\.sh$//' )
exec $MY_PYTHON_PATH $PYTHON_SCRIPT "$@"
Отказ от ответственности: это не проверено, просто написано это с моей головы.
Теперь просто настройте MY_PYTHON_PATH на каждом компьютере и вызовите script.py.sh
вместо script.py
.
Резюме Это решение является только вторым, поскольку оно требует много вызовов сценариев, которые должны быть изменены с script.py
на script.py.sh
, чего следует избегать, если это вообще возможно.
Используйте env
для вызова сценарий python-finder, который просто вызывает двоичный код python, содержащийся в $MY_PYTHON_PATH
. Скрипт python-finder должен находиться в одном месте на обеих машинах, при необходимости использовать символические ссылки.
#!/usr/bin/env /usr/local/bin/python-finder.sh
Содержимое python-finder.sh:
#!/bin/bash
exec $MY_PYTHON_PATH "$@"
Это работает, потому что для сценариев интерпретатора (те, которые начинаются с shebang) execve вызывает интерпретатор и передает имя файла в env, которое, в свою очередь, передает его команде, которую она вызывает.
MY_PYTHON_PATH
), но не другую (PATH
)? – chepner 24 January 2013 в 16:21PATH
, а затем использовании его для этой цели. ПосколькуPATH
используется в масштабах всей системы, это может иметь нежелательные последствия. Более разумно использовать выделенный env varMY_PYTHON_PATH
без оговорок. – Perleone 25 January 2013 в 02:29