通过代理服务器,进行FTP操作
2020-01-15 09:26
274 查看
在网上搜了一下,对.Net的代理服务器和Ftp操作进行一些整理.
代理服务类NetProxy
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
namespace WindowsApplication4
{
public class NetProxy
{
string _ProxyAddress = String.Empty;
public string ProxyAddress
{
get { return _ProxyAddress; }
}
int _ProxyPort = 0;
public int ProxyPort
{
get { return _ProxyPort; }
}
public NetProxy(string proxyAddress, int proxyPort)
{
_ProxyAddress = proxyAddress;
_ProxyPort = proxyPort;
}
/**//// <summary>
/// 获得代理服务器
/// </summary>
/// <param name="userName">代理用户名</param>
/// <param name="userKey">代理用户密码</param>
/// <returns></returns>
public WebProxy GetProxy(string userName, string userKey)
{
WebProxy _WP = new WebProxy(ProxyAddress, ProxyPort);
//本地地址不使用代理服务器
_WP.BypassProxyOnLocal = true;
ICredentials credentials = new NetworkCredential(userName, userKey);
_WP.Credentials = credentials;
return _WP;
}
/**//// <summary>
/// 设置全局代理服务
/// </summary>
/// <param name="webProxy"></param>
public void SetAllProxy(WebProxy webProxy)
{
WebRequest.DefaultWebProxy = webProxy;
}
public void Test(string userName, string userKey)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://www.sina.com.cn"));
request.Proxy = GetProxy(userName, userKey);
request.UserAgent = "Mozilla/4.0";
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.AllowAutoRedirect = true;
byte[] str = System.Text.Encoding.ASCII.GetBytes("username=admin");
request.ContentLength = str.Length;
Stream temps = request.GetRequestStream();
return true;
}
catch (WebException ex)
{
return false;
}
}
}
}
Ftp操作类
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
namespace WindowsApplication4
{
public class Ftp
{
string _ftpServerIP = String.Empty;
public string FtpServerIP
{
get { return _ftpServerIP; }
}
WebProxy _Proxy = null;
public WebProxy Proxy
{
get { return _Proxy; }
}
string _ftpUserID = String.Empty;
public string FtpUserID
{
get { return _ftpUserID; }
}
string _ftpPassword = String.Empty;
public string FtpPassword
{
get { return _ftpPassword; }
}
public Ftp(string ftpServerIP, string ftpUserID, string ftpPassword, WebProxy webProxy)
{
_ftpServerIP = ftpServerIP;
_ftpUserID = ftpUserID;
_ftpPassword = ftpPassword;
_Proxy = webProxy;
}
/**//// <summary>
/// 创建FTP实体
/// </summary>
/// <param name="uri">InterNet的URI信息</param>
/// <returns>FTP实体</returns>
private FtpWebRequest CreatFtp(string uri)
{
FtpWebRequest _FtpRequest = null;
_FtpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
//指定文件传输类型
_FtpRequest.UseBinary = true;
_FtpRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
// 默认为true,连接不会被关闭
// 在一个命令之后被执行
_FtpRequest.KeepAlive = false;
//设置代理
_FtpRequest.Proxy = this.Proxy;
return _FtpRequest;
}
/**//// <summary>
/// 上传文件
/// </summary>
/// <param name="filename">文件全名称</param>
private void Upload(string filename)
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + FtpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP = this.CreatFtp(uri);
// 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length;
// 缓冲大小设置为2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
// 打开一个文件流 (System.IO.FileStream) 去读上传的文件
FileStream fs = fileInf.OpenRead();
// 把上传的文件写入流
Stream strm = reqFTP.GetRequestStream();
// 每次读文件流的2kb
contentLen = fs.Read(buff, 0, buffLength);
// 流内容没有结束
while (contentLen != 0)
{
// 把内容从file stream 写入 upload stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
// 关闭两个流
strm.Close();
fs.Close();
}
/**//// <summary>
/// 下载文件
/// </summary>
/// <param name="filePath">路径</param>
/// <param name="fileName">文件名称</param>
private void Download(string filePath, string fileName)
{
string uri = "ftp://" + FtpServerIP + "/" + fileName;
FtpWebRequest reqFTP = this.CreatFtp(uri);
FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
}
}
代理服务类NetProxy
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
namespace WindowsApplication4
{
public class NetProxy
{
string _ProxyAddress = String.Empty;
public string ProxyAddress
{
get { return _ProxyAddress; }
}
int _ProxyPort = 0;
public int ProxyPort
{
get { return _ProxyPort; }
}
public NetProxy(string proxyAddress, int proxyPort)
{
_ProxyAddress = proxyAddress;
_ProxyPort = proxyPort;
}
/**//// <summary>
/// 获得代理服务器
/// </summary>
/// <param name="userName">代理用户名</param>
/// <param name="userKey">代理用户密码</param>
/// <returns></returns>
public WebProxy GetProxy(string userName, string userKey)
{
WebProxy _WP = new WebProxy(ProxyAddress, ProxyPort);
//本地地址不使用代理服务器
_WP.BypassProxyOnLocal = true;
ICredentials credentials = new NetworkCredential(userName, userKey);
_WP.Credentials = credentials;
return _WP;
}
/**//// <summary>
/// 设置全局代理服务
/// </summary>
/// <param name="webProxy"></param>
public void SetAllProxy(WebProxy webProxy)
{
WebRequest.DefaultWebProxy = webProxy;
}
public void Test(string userName, string userKey)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://www.sina.com.cn"));
request.Proxy = GetProxy(userName, userKey);
request.UserAgent = "Mozilla/4.0";
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.AllowAutoRedirect = true;
byte[] str = System.Text.Encoding.ASCII.GetBytes("username=admin");
request.ContentLength = str.Length;
Stream temps = request.GetRequestStream();
return true;
}
catch (WebException ex)
{
return false;
}
}
}
}
Ftp操作类
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
namespace WindowsApplication4
{
public class Ftp
{
string _ftpServerIP = String.Empty;
public string FtpServerIP
{
get { return _ftpServerIP; }
}
WebProxy _Proxy = null;
public WebProxy Proxy
{
get { return _Proxy; }
}
string _ftpUserID = String.Empty;
public string FtpUserID
{
get { return _ftpUserID; }
}
string _ftpPassword = String.Empty;
public string FtpPassword
{
get { return _ftpPassword; }
}
public Ftp(string ftpServerIP, string ftpUserID, string ftpPassword, WebProxy webProxy)
{
_ftpServerIP = ftpServerIP;
_ftpUserID = ftpUserID;
_ftpPassword = ftpPassword;
_Proxy = webProxy;
}
/**//// <summary>
/// 创建FTP实体
/// </summary>
/// <param name="uri">InterNet的URI信息</param>
/// <returns>FTP实体</returns>
private FtpWebRequest CreatFtp(string uri)
{
FtpWebRequest _FtpRequest = null;
_FtpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
//指定文件传输类型
_FtpRequest.UseBinary = true;
_FtpRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
// 默认为true,连接不会被关闭
// 在一个命令之后被执行
_FtpRequest.KeepAlive = false;
//设置代理
_FtpRequest.Proxy = this.Proxy;
return _FtpRequest;
}
/**//// <summary>
/// 上传文件
/// </summary>
/// <param name="filename">文件全名称</param>
private void Upload(string filename)
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + FtpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP = this.CreatFtp(uri);
// 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length;
// 缓冲大小设置为2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
// 打开一个文件流 (System.IO.FileStream) 去读上传的文件
FileStream fs = fileInf.OpenRead();
// 把上传的文件写入流
Stream strm = reqFTP.GetRequestStream();
// 每次读文件流的2kb
contentLen = fs.Read(buff, 0, buffLength);
// 流内容没有结束
while (contentLen != 0)
{
// 把内容从file stream 写入 upload stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
// 关闭两个流
strm.Close();
fs.Close();
}
/**//// <summary>
/// 下载文件
/// </summary>
/// <param name="filePath">路径</param>
/// <param name="fileName">文件名称</param>
private void Download(string filePath, string fileName)
{
string uri = "ftp://" + FtpServerIP + "/" + fileName;
FtpWebRequest reqFTP = this.CreatFtp(uri);
FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
}
}
转载于:https://www.cnblogs.com/chinaicm/archive/2008/07/14/1242387.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- QTP设置检查点,通过判断检查点checkpoint的值进行相应操作
- 通过SSIS的“查找”组件进行不同数据源之间数据的合并操作
- 通过php进行mysql数据库查询的基本操作
- Java语言操作FTP服务进行文件的处理
- C328R 通过模拟器进行操作
- JAVA大字符串存储采用静态HTML,通过jsoup 对 HTML 文档进行解析和操作
- silverlight 通过WCF与LinQ对数据库进行操作2
- java通过二分法对数组进行高效查找及插入操作
- 通过数据库对Django进行删除字段和删除模型的操作
- 进行事务操作----通过连接池拿对象的第三次修改
- [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作
- PHP通过{}对字符串进行操作
- Spring中使用getSession()与通过HibernateTemplate进行数据操作的差别
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 利用PBFunc在Powerbuilder中进行FTP操作
- ASP通过DOM进行XML操作
- Hibernate动态建表,通过hbm.xml配置文件创建数据表,进行数据库操作, 动态模型
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- eclipse通过码云进行的GIT操作
- mongodb C/C++ driver 通过帐号验证登录mongo服务器并进行相应操作