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;
        }
    }
}  
时间: 2024-10-14 06:07:20

C#中给WebClient添加代理Proxy的相关文章

scrapy学习2 爬虫中间件,下载器中间件之添加代理

中间件 注意:这些中间件都放在middleware中 下载中间件 作用 实例: 代理被封,添加代理 方式一:内置添加代理功能 import os # -*- coding: utf-8 -*- import os import scrapy from scrapy.http import Request class ChoutiSpider(scrapy.Spider): name = 'chouti' allowed_domains = ['chouti.com'] start_urls =

代理(Proxy)和反射(Reflection)

前面的话 ES5和ES6致力于为开发者提供JS已有却不可调用的功能.例如在ES5出现以前,JS环境中的对象包含许多不可枚举和不可写的属性,但开发者不能定义自己的不可枚举或不可写属性,于是ES5引入了Object.defineProperty()方法来支持开发者去做JS引擎早就可以实现的事情.ES6添加了一些内建对象,赋予开发者更多访问JS引擎的能力.代理(Proxy)是一种可以拦截并改变底层JS引擎操作的包装器,在新语言中通过它暴露内部运作的对象,从而让开发者可以创建内建的对象.本文将详细介绍代

代理(Proxy)和反射(Reflection) (转)

转自:http://www.cnblogs.com/xiaohuochai/p/7268600.html 前面的话 ES5和ES6致力于为开发者提供JS已有却不可调用的功能.例如在ES5出现以前,JS环境中的对象包含许多不可枚举和不可写的属性,但开发者不能定义自己的不可枚举或不可写属性,于是ES5引入了Object.defineProperty()方法来支持开发者去做JS引擎早就可以实现的事情.ES6添加了一些内建对象,赋予开发者更多访问JS引擎的能力.代理(Proxy)是一种可以拦截并改变底层

Scrapy框架之如何给你的请求添加代理

首先做好准备工作,创建一个Scrapy项目,目录结构如下: 注:spiders目录下多了3个文件,db.py,default.init和items.json.db.py是我简单封装的一个数据库访问的lib文件,default.init是我的数据库和代理相关的配置文件,items.json是最后的输出文件. 给请求添加代理有2种方式,第一种是重写你的爬虫类的start_request方法,第二种是添加download中间件.下面会分别介绍这2种方式. 重写start_request方法 我在我的爬

Android客户端添加代理访问网络

因为公司的网络必须要通过代理才能访问外网, 给开发带了极大的不便.总共有两种一中是使用java自带的HttpURLConnection还有一种是使用Android平台中已经继承了的HttpClient [1].[代码] 使用HttpClient添加代理 跳至 [1] [2] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 private HttpClient client = null;     private String url = PropertiesUtil.getUrl

Java中两种动态代理的实现

本文介绍了java中两种动态代理的实现方法,Spring的动态代理也是基于这两种方法的.直接附上源码: 1.JDK实现 使用JDK实现动态代理必须使用接口 接口Work.java public interface Work { public void work(); } 实现类WorkImpl.java public class WorkImpl implements Work { @Override public void work() { System.out.println("我在工作&q

为 git 添加代理

最近基于 PDFium 项目做一些东西.之前得了代码,今天想要更新到最新的,发现怎么都 pull 不下来.后来想起来,可能是 git 没有使用代理的原因.于是添加代理,果然更新成功. 在 git bash 中输入: git config --global http.proxy http://proxy.example.com:8888 再 pull 就OK了.

代理Proxy初探

Proxy,也就是"代理"了.意思就是,你不用去做,别人代替你去处理.比如说:租房,你只要找到"我爱我家"中介,把所有的事情交给他们去代劳, "我爱我家"此时就是你的Proxy. 它在程序开发中起到了非常重要的作用,比如传说中的 AOP(面向切面编程),就是针对代理的一种应用.此外,在设计模式中,还有一个"代理模式".在公司里要上外网,要在浏览器里设置一个 HTTP 代理.wocao,代理无处不在啊,不搞明白,岂不是很没面子?

Spring框架中2种生成代理对象的方法

Spring框架中2种生成代理对象的方法 Jdk Proxy基于接口生成代理对象,只能赋值给接口的引用(默认使用jdk). Spring进一步封装 CGLIB,基于实现类生成代理对象,既可以赋值给接口的引用,也可以赋值给实现类的引用 JDK提供的Proxy,和spring进一步封装的CGLIB.二者生成的代理没有任何区别,生成的都是代理对象.只是生产方式不同,前者是基于接口生成代理,后者基于实现类生成代理对象 如何切换spring框架中默认生成代理的方式 <aop:config proxy-ta