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; } } }