zoukankan      html  css  js  c++  java
  • C# 为网络程序添加用户代理

    如何为网络程序添加用户代理,本人推荐使用UrlMkSetSessionOption函数,

    不过该函数有一个弱点不可以X64编译,X86编译软件才可以调用该函数

    否则会一直返回!S_OK意义错误。第二呢 我建议大家在网上找找类似

    http://www.proxy.com.ru/免费的代理的网站,代码上的代理是在网上找的

    几日后你在使用我的代码则没有代理效果 因为代理服务器无效,所有后面

    需要查阅方法的自己去找一个免费代理的服务器地址 不要说我没提醒。

    我不建议大家在Wininet层使用InternetSetOption函数,

    除非有必要 否则建议你使用我上面的办法。

    示例代码:

            private void Form1_Load(object sender, EventArgs e)
            {
                SetUserProxy("210.152.131.254:3128", null, null);
                webBrowser1.Navigate("http://www.baidu.com/s?wd=ip");
            }

    使用该方法只需要简简单单的几句话就可以搞定 灰常方便。

            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
            public struct INTERNET_PROXY_INFO
            {
                public int dwAccessType;
                public string lpszProxy;
                public string lpszProxyBypass;
            }
    
            [DllImport("urlmon.dll", SetLastError = true, CharSet = CharSet.Ansi)]
            public static extern int UrlMkSetSessionOption(int dwOption, ref INTERNET_PROXY_INFO pBuffer, int dwBufferLength, int dwReserved);
    
            [DllImport("urlmon.dll", SetLastError = true, CharSet = CharSet.Ansi)]
            public static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);
    
            public const int S_OK = 0;
            public const int NULL = 0;
            public const int INTERNET_OPEN_TYPE_PROXY = 3;
            public const int INTERNET_OPTION_PROXY = 38;
            public const int INTERNET_OPTION_PROXY_USERNAME = 43;
            public const int INTERNET_OPTION_PROXY_PASSWORD = 44;
    
            // 置网络代理
            private bool SetUserProxy(string address, string username, string password)
            {
                username = username ?? string.Empty;
                password = password ?? string.Empty;
                var sProxy = new INTERNET_PROXY_INFO()
                {
                    lpszProxy = address,
                    dwAccessType = INTERNET_OPEN_TYPE_PROXY
                };
                UrlMkSetSessionOption(INTERNET_OPTION_PROXY_USERNAME, username, username.Length, NULL);
                UrlMkSetSessionOption(INTERNET_OPTION_PROXY_PASSWORD, password, password.Length, NULL);
                return UrlMkSetSessionOption(INTERNET_OPTION_PROXY, ref sProxy, 12, NULL) == S_OK;
            }

    上面的代码也是比较简单的,首先开辟一个INTERNET_PROXY_INFO的结构,占12字节

    然后在.dwAccessType赋值INTERNET_OPEN_TYPE_PROXY打开代理.lpszProxy赋代理

    服务器的地址 后面再设置 代理用户名,代理用户密码 并把PIPI结构体传入函数 测试一下

    返回值是不是S_OK如果是返回真否则返回假 整体的代码都不是好难 。

  • 相关阅读:
    java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
    项目开发中关于权限的实现方案简单描述(帮助以后回忆)
    一些比较有用的模板
    递归之遍历部门
    关于s2sh框架关于hibernate懒加载问题的说明和解决方案
    Hibernate实体映射配置(XML)简单三步完美配置
    项目添加性能监控日志
    redis常用命令大全
    redis主从同步
    redis之哨兵部署运行日志解读
  • 原文地址:https://www.cnblogs.com/wlmbz/p/4919239.html
Copyright © 2011-2022 走看看