GVKun编程网logo

c# – WebProxy错误:需要代理验证(是否要使用代理服务器)

27

在本文中,我们将给您介绍关于c#–WebProxy错误:需要代理验证的详细内容,并且为您解答是否要使用代理服务器的相关问题,此外,我们还将为您提供关于C#.netcore使用自定义的WebProxy、

在本文中,我们将给您介绍关于c# – WebProxy错误:需要代理验证的详细内容,并且为您解答是否要使用代理服务器的相关问题,此外,我们还将为您提供关于C# .net core 使用自定义的WebProxy、c# – 如何从WebRequest中删除代理,并保持DefaultWebProxy不变、c# – 远程服务器返回错误:(407)需要代理验证、c# – 需要代理身份验证(Forefront TMG需要授权才能完成请求.拒绝访问Web代理筛选器.)的知识。

本文目录一览:

c# – WebProxy错误:需要代理验证(是否要使用代理服务器)

c# – WebProxy错误:需要代理验证(是否要使用代理服务器)

我使用以下代码来访问互联网上的html数据:
WebProxy p = new WebProxy("localproxyIP:8080",true);
p.Credentials = new NetworkCredential("domain\\user","password");
WebRequest.DefaultWebProxy = p;
WebClient client = new WebClient();
string downloadString = client.DownloadString("http://www.google.com");

但是出现以下错误:“需要代理验证”.
我不能使用默认代理,因为我的代码从没有默认代理设置的特殊帐户下的Windows服务运行.
所以,我想标明我的代码中的所有代理设置.
请告诉我如何解决这个错误.

解决方法

你必须设置WebClient.Proxy属性..
WebProxy p = new WebProxy("localproxyIP:8080","password");
WebRequest.DefaultWebProxy = p;
WebClient client = new WebClient();
**client.Proxy = p;**
string downloadString = client.DownloadString("http://www.google.com");

C# .net core 使用自定义的WebProxy

C# .net core 使用自定义的WebProxy

因为.net core 的System.Net 中没有提供WebProxy这个方法,所以可以根据需求实现一个.

    public class CoreWebProxy : IWebProxy
    {
        public readonly Uri Uri;
        private readonly bool bypass;

        public CoreWebProxy(Uri uri, ICredentials credentials = null, bool bypass = false)
        {
            Uri = uri;
            this.bypass = bypass;
            Credentials = credentials;
        }

        public ICredentials Credentials { get; set; }

        public Uri GetProxy(Uri destination) => Uri;

        public bool IsBypassed(Uri host) => bypass;

        public override int GetHashCode()
        {
            if (Uri == null)
            {
                return -1;
            }

            return Uri.GetHashCode();
        }
    }

参考:

  • Specify proxy in asp.net core rc2
  • .Net Core中使用Proxy请求数据

c# – 如何从WebRequest中删除代理,并保持DefaultWebProxy不变

c# – 如何从WebRequest中删除代理,并保持DefaultWebProxy不变

我使用FtpWebRequest做一些FTP的东西,我需要直接连接(没有代理).但是WebRequest.DefaultWebProxy包含IE代理设置(我估计).
WebRequest request = WebRequest.Create("ftp://someftpserver/");
// request.Proxy is null here so setting it to null does not have any effect
WebResponse response = request.GetResponse();
// connects using WebRequest.DefaultWebProxy

我的代码是一个巨大的应用程序,我不想更改WebRequest.DefaultWebProxy,因为它是全局静态属性,它可能会对应用程序的其他部分产生不利影响.

有什么想法怎么办?

解决方法

尝试将代理设置为空的WebProxy,即:
request.Proxy = new WebProxy();

这应该创建一个空代理.

c# – 远程服务器返回错误:(407)需要代理验证

c# – 远程服务器返回错误:(407)需要代理验证

我在.NET 3.5中使用此代码并收到错误“远程服务器返回错误:(407)需要代理验证.”
using (WebClient client = new WebClient())
{
    WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;

    try
    {
        string webPageStr = client.DownloadString(URL);
        Console.WriteLine("OK");
    }
    catch (Exception ex)
    {
        Console.WriteLine("FAIL");
        Console.WriteLine(ex.Message);
    }
}

但是,此代码可以在.NET 4.0中顺利运行,因为此行足以传递代理身份验证,而不适用于.NET 3.5.

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;

因此,我尝试了许多其他方法来解决这个问题,但没有一个工作:

1)用.替换CredentialCache.DefaultCredentials行

WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(user,password,domain);

2)创建新的代理对象

IWebProxy proxy = new WebProxy(proxyUrl,port);
proxy.Credentials = new NetworkCredential(user,pass,domain);
client.Proxy = proxy;
client.Credentials = new NetworkCredential(user,domain);

3)添加此行

client.UseDefaultCredentials = true;

4)使用HttpWebRequest而不是WebClient并重复上面的每个过程.这是示例代码.

HttpWebRequest webRequest = WebRequest.Create(URL) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential(user,domain);
webRequest.Proxy.Credentials = new NetworkCredential(user,domain);

try
{
    webRequest.GetResponse();
    Console.WriteLine("OK");
}
catch (Exception ex)
{
    Console.WriteLine("FAIL");
    Console.WriteLine(ex.Message);
}

因为我必须使用.NET 3.5,所以我觉得自己走到了尽头.我不知道这两个.NET版本之间必须有区别.非常感谢你提前.

解决方法

只需将此添加到配置
<system.net>
      <defaultProxy useDefaultCredentials="true" >
      </defaultProxy>
   </system.net>

c# – 需要代理身份验证(Forefront TMG需要授权才能完成请求.拒绝访问Web代理筛选器.)

c# – 需要代理身份验证(Forefront TMG需要授权才能完成请求.拒绝访问Web代理筛选器.)

当我试图向Twitter发帖时,上述错误即将来临.如何摆脱这个错误?

堆栈跟踪如下:

Exception = {“The Remote Server returned an error: (407) Proxy Authentication required.”} ExceptionStatus = ProtocolError

码:

private string GetoAuthUrl()
{
    IFluentTwitter twitter;

    //Override the callback url if one was entered
    if (CallbackUrl != null && CallbackUrl.Trim().Length > 0)
    {
        twitter = FluentTwitter.CreateRequest().Configuration.UseHttps().Authentication.GetRequestToken(ConsumerKey,ConsumerSecret,CallbackUrl);
    }
    else
    {
        twitter = FluentTwitter.CreateRequest().Configuration.UseHttps().Authentication.GetRequestToken(ConsumerKey,ConsumerSecret);
    }

    var response = twitter.Request();
    UnauthorizedToken UnauthorizedToken = response.AsToken();

    string AuthorizationUrl = FluentTwitter.CreateRequest().Authentication.GetAuthorizationUrl(UnauthorizedToken.Token);
    return AuthorizationUrl;
}

解决方法

如果流畅的twitter正在使用WebRequests,那么您需要使用以下代码为代理指定凭据:

System.Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

这将告诉所有Web请求使用运行应用程序的用户的凭据来通过代理进行身份验证.

要使其工作,您需要将应用程序配置为在已授予代理服务器访问权限的服务帐户下运行.然后,您可以绑定此服务帐户,以便它具有尽可能少的权限来运行该服务.

如果您的应用程序需要在无权使用代理服务器的帐户下运行,您可以明确指定凭据,如下所示:

System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("username","password","domain");
System.Net.WebRequest.DefaultProxy.Credentials = credentials;

这方面的缺点是您必须将这些凭据存储在某个位置,并且如果攻击者设法破坏了您的应用程序,则攻击者可以捕获这些凭据.在某些环境中,从安全角度来看,这是不可接受的.

我们今天的关于c# – WebProxy错误:需要代理验证是否要使用代理服务器的分享已经告一段落,感谢您的关注,如果您想了解更多关于C# .net core 使用自定义的WebProxy、c# – 如何从WebRequest中删除代理,并保持DefaultWebProxy不变、c# – 远程服务器返回错误:(407)需要代理验证、c# – 需要代理身份验证(Forefront TMG需要授权才能完成请求.拒绝访问Web代理筛选器.)的相关信息,请在本站查询。

本文标签: