The remote server returned an error: (407) Proxy Authentication Required
Asked Answered
D

7

78

I'm getting this error when I call a web service:

"The remote server returned an error: (407) Proxy Authentication Required".

I get the general idea and I can get the code to work by adding

myProxy.Credentials = NetworkCredential("user", "password", "domain");

or by using DefaultCredentials in code. My problem is that the call to the web service works in production without this.

It seems like there is a non code solution involving Machine.config, but what is it? At the moment I can't get to the production box's machine.config file to see what that looks like. I tried updating my machine.config as follows, but I still get the 407 error.

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
        <bypasslist>
            <clear />
        </bypasslist>
        <proxy proxyaddress="myproxy:9000"
               usesystemdefault="false"
               bypassonlocal="true"
               autoDetect="False" />
    </defaultProxy>
</system.net>
Davie answered 5/4, 2010 at 22:40 Comment(0)
C
146

Just add this to config

<system.net>
    <defaultProxy useDefaultCredentials="true" >
    </defaultProxy>
</system.net>
Coleman answered 28/9, 2012 at 6:31 Comment(4)
For those interested, this was exactly what I needed inside a NetSuite console / web services application from (what seems to be) a firewall / proxy constraint.Rattlehead
Best answer, make it a configuration detail not a code problem.Araldo
This still works in Asp.net core 2.0. I had to add a web.config file purely to handle this.Bionomics
Mine is a C# console application working with AWS SDK to access S3 buckets. Add this to my app.config in my console application solved the issueWaistcoat
C
55

In following code, we don't need to hard code the credentials.

service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
Chapbook answered 20/8, 2012 at 10:13 Comment(5)
This worked perfect for me. If you find yourself not wanting to hardcode you username and password try this option first.Allergic
Thanks that worked. However, are there security risks with doing it this way vs. the method shown by mehmet emin? With adding network credentials? Or would using network credentials give more permissions, and introduce a security risk?Mock
@Mock Only problem with 'Mehmet Emin' code is hard-coding of credentials. In real worlds, password is changed every month due to security threats, so either make them configurable in config file. so it's always good to follow my stuff or I like Seckin way also.Chapbook
Worked as expected. ThanksModular
@kucluk You have created object of service proxy, so put this code before calling any method of service.Chapbook
S
20

Check with your firewall expert. They open the firewall for PROD servers so there is no need to use the Proxy.

Thanks your tip helped me solve my problem:

Had to to set the Credentials in two locations to get past the 407 error:

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

and voila!

Shoebill answered 14/9, 2010 at 6:59 Comment(1)
uirTradeStream ?Canicula
J
7

Probably the machine or web.config in prod has the settings in the configuration; you probably won't need the proxy tag.

<system.net>
    <defaultProxy useDefaultCredentials="true" >
        <proxy usesystemdefault="False"
               proxyaddress="http://<ProxyLocation>:<port>"
               bypassonlocal="True"
               autoDetect="False" />
    </defaultProxy>
</system.net>
Juliannajulianne answered 5/4, 2010 at 22:51 Comment(1)
Thanks, I tried this and I still get the "(407) Proxy Authentication Required" error. Does adding the section you list stop the error for you? The only thing that works for sure on my local box is to set the myProxy.Credentials property in code.Davie
E
4
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;

webRequest.Proxy = WebRequest.DefaultWebProxy;

webRequest.Credentials = new NetworkCredential("user", "password");

webRequest.Proxy.Credentials = new NetworkCredential("user", "password");

It is successful.

Eurypterid answered 8/6, 2012 at 13:9 Comment(2)
uirTradeStream ?Canicula
hi using this code but it not working at webRequest.Proxy = WebRequest.DefaultWebProxy; and getting an exception: (407) Proxy Authentication Required. please helpTamatave
S
3

Thought of writing this answer as nothing worked from above & you don't want to specify proxy location.

If you're using httpClient then consider this.

HttpClientHandler handler = new HttpClientHandler();

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
handler.Proxy = proxy;

var client = new HttpClient(handler);
// your next steps...

And if you're using HttpWebRequest:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri + _endpoint);

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = proxy;

Kind referencce: https://medium.com/@siriphonnot/the-remote-server-returned-an-error-407-proxy-authentication-required-86ae489e401b

Sieracki answered 27/6, 2020 at 8:58 Comment(0)
T
2

I had a similar proxy related problem. In my case it was enough to add:

webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");
Trifle answered 5/12, 2011 at 13:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.