c#通过代理访问网络

方法1:修改注册表Software//Microsoft//Windows//CurrentVersion//Internet Settings下 ProxyEnable和ProxyServer。这种方法适用于局域网用户,拨号用户无效。
1 public partial class Form1 : Form
2    {
3
4        //用于刷新注册表
5        [DllImport(@"wininet",
6        SetLastError = true,
7        CharSet = CharSet.Auto,
8        EntryPoint = "InternetSetOption",
9        CallingConvention = CallingConvention.StdCall)]
10
11
12        public static extern bool InternetSetOption
13        (
14        int hInternet,
15        int dmOption,
16        IntPtr lpBuffer,
17        int dwBufferLength
18        );
19
20         private void btnStart_Click(object sender, EventArgs e)
21        {
22            RegistryKey pregkey;
23                pregkey = Registry.CurrentUser.OpenSubKey("Software//Microsoft//Windows//CurrentVersion//Internet Settings", true);
24                if (pregkey == null)
25                {
26                    Console.WriteLine("键值不存在");
27                }
28                else
29                {
30                    pregkey.SetValue("ProxyEnable", 1);
31                    pregkey.SetValue("ProxyServer", "代理地址");
32                    //激活代理设置
33                    InternetSetOption(0, 39, IntPtr.Zero, 0);
34                    InternetSetOption(0, 37, IntPtr.Zero, 0);
35                    webBrowser1.Navigate(txtweb.Text, false);
36                    // System.Threading.Thread.Sleep(10000);
37                }
38        }
39}

 

方法2: 修改注册表Software//Microsoft//Windows//CurrentVersion//Internet Settings//Connections下以你拨号连接名为键的值,该键为二进制。这种方法适用于拨号用户。
public partial class FrmMain : Form
{
[DllImport(
@"wininet",
SetLastError
= true,
CharSet
= CharSet.Auto,
EntryPoint
= "InternetSetOption",
CallingConvention
= CallingConvention.StdCall)]
public static extern bool InternetSetOption
(
int hInternet,
int dmOption,
IntPtr lpBuffer,
int dwBufferLength
);
//将值转换为注册表中的二进制值
public byte ChangeTobyte(char i)
{
byte key = 0;
switch (i)
{
case '0': key = 48; break;
case '1': key = 49; break;
case '2': key = 50; break;
case '3': key = 51; break;
case '4': key = 52; break;
case '5': key = 53; break;
case '6': key = 54; break;
case '7': key = 55; break;
case '8': key = 56; break;
case '9': key = 57; break;
case '.': key = 46; break;
case ':': key = 58; break;
}
return key;
}
private void btnStart_Click(object sender, EventArgs e)
{
int i = ("代理地址").Length;
byte[] key = new byte[50];
char[] source = ("代理地址").ToCharArray();
key[
0] = 60;
key[
4] = 3;
key[
8] = 3;
key[
12] = (byte)i;
for (int ii = 0; ii < source.Length; ii++)
{
key[
16 + ii] = ChangeTobyte(source[ii]);
}
string sDirectX = "";
for (int k = 0; k < key.Length; k++)
{
if (key[k] != 0)
{
sDirectX
+= key[k] + " ";
}
}
//MessageBox.Show(sDirectX);
                RegistryKey pregkey;
pregkey
= Registry.CurrentUser.OpenSubKey("Software//Microsoft//Windows//CurrentVersion//Internet Settings//Connections", true);
if (pregkey == null)
{
Console.WriteLine(
"键值不存在");
}
else
{
pregkey.SetValue(
"拨号名字对应键值", key, RegistryValueKind.Binary);
//激活代理设置
                    InternetSetOption(0, 39, IntPtr.Zero, 0);
InternetSetOption(
0, 37, IntPtr.Zero, 0);
webBrowser1.Navigate(txtweb.Text,
false);
webBrowser1.Refresh();
}
}
}

方法3: 使用c#自带的webproxy类

private string LoadHTML(string ProxyName,int ProxyPort,string UserName,string UserKey,string DomainName,string URL)
          {
             //读取HTML内容
             WebProxy _WP = new WebProxy(ProxyName,ProxyPort);
             _WP.BypassProxyOnLocal = true;
             ICredentials credentials = new NetworkCredential(UserName,UserKey,DomainName);
             _WP.Credentials = credentials;
             //GlobalProxySelection.Select = _WP;
             WebRequest _HWR = WebRequest.CreateDefault(new System.Uri(URL));
             _HWR.Proxy = _WP;
             WebResponse _HRS = _HWR.GetResponse() ;
             Stream ReceiveStream = _HRS.GetResponseStream();
             Encoding encode = System.Text.Encoding.Default;
             StreamReader sr = new StreamReader( ReceiveStream, encode );
             string HTMLContent = ;
             Char[] read = new Char[256];
             int count = sr.Read( read, 0, 256 );
             while (count > 0)
               {
                 String str = new String(read, 0, count);
                 HTMLContent += str;
                 count = sr.Read(read, 0, 256);
             }
             return HTMLContent;
         }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值