C#中给WebClient添加代理Proxy

效果图:

 

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Net;  
using System.Text;  
using System.Windows.Forms;  
  
namespace TestProxy  
{  
    public partial class MainForm : Form  
    {  
        public MainForm()  
        {  
            InitializeComponent();  
        }  
  
        private void btnDownload_Click(object sender, EventArgs e)  
        {  
            try  
            {  
                Start();  
            }  
            catch (Exception ex)  
            {  
                MessageBox.Show(ex.Message);  
            }  
        }  
  
        private void Start()  
        {  
            txtResult.Clear();  
            var client = new WebClient();  
            var uri = new Uri(txtUrl.Text.Trim());  
            client.DownloadStringCompleted += client_DownloadStringCompleted;  
            client.Encoding = Encoding.UTF8;  
  
            if (checkBox.Checked)  
            {  
                var proxy = CreateProxy();  
                if (proxy == null) return;  
                client.Proxy = proxy;  
            }  
            client.DownloadStringAsync(uri);  
        }  
  
        private void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)  
        {  
            try  
            {  
                txtResult.Text = e.Result;  
            }  
            catch (Exception ex)  
            {  
                var msg = ex.Message;  
                if (ex.InnerException != null) msg = ex.InnerException.Message;  
                MessageBox.Show(msg);  
            }  
        }  
  
        private void checkBox_CheckedChanged(object sender, EventArgs e)  
        {  
            gbProxy.Enabled = checkBox.Checked;  
        }  
  
        private WebProxy CreateProxy()  
        {  
            var host = txtHost.Text.Trim();  
            if (string.IsNullOrWhiteSpace(host))  
            {  
                MessageBox.Show("请输入代理地址");  
                return null;  
            }  
            var port = 0;  
            try  
            {  
                port = Convert.ToInt32(txtPort.Text.Trim());  
            }  
            catch (Exception)  
            {  
                MessageBox.Show("请输入正确的代理端口");  
                return null;  
            }  
            var cre = new NetworkCredential(txtUserName.Text, txtPwd.Text);  
            var proxy = new WebProxy(txtHost.Text.Trim(), port) {Credentials = cre};  
            return proxy;  
        }  
    }  
}  

 

posted @ 2017-08-01 15:02  俺老刘  阅读(2558)  评论(0编辑  收藏  举报