2013-03-29 3 views
2

여러 번 물어 본 적이 있습니다. 나는 여기에있는 모든 게시물과이 사이트와 같은 다른 사이트를 대부분 읽었습니다. 아무 소용와(407) 프록시 인증이 필요합니다.

http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/2931d21c-9ca8-4256-b213-915fad4c941b/

. 여기에 환경을의

윈도우 서버 2008 R2 64 비트 비주얼 스튜디오 2008 닷넷 프레임 워크 3.5 여기

내가 코드를

WebRequest req = WebRequest.Create(requestUri + data); 
req.Proxy = new System.Net.WebProxy(<ProxyURL>:<port>",true); 
req.Proxy.Credentials = CredentialCache.DefaultCredentials; 
WebResponse resp = req.GetResponse(); 

이를 사용하여 프록시 인증을했다

을 시도 것입니다 작동했지만, 응용 프로그램의 속도가 느려지면서 나는 내가 한 machine.config 파일을 편집 할 수 있다는 것을 알게되었습니다. 그것은 또한 일했다!

적어도 하루 또는 2 일. 그런 다음 실패하기 시작합니다.

나는 다음이 프록시에 연결하기 위해 IE 설정을 사용합니다 있지만 작동하지 않는 나의 이해에서이

<system.net> 
    <defaultProxy 
     useDefaultCredentials="true"> 
     <proxy usesystemdefault="True"/> 
     </defaultProxy> 
    </system.net> 

에 편집. 나는 또한 코드를 시도했다

WebProxy proxy = new WebProxy(<proxy>:<port>); 
CredentialCache myCache = new CredentialCache(); 
myCache.Add(new Uri(requestUri + data), "BASIC", new NetworkCredential(<username>,<password>)); 
proxy.Credentials = myCache; 
request.Proxy = proxy; 
request.Method = "GET"; 

그리고 이것은 작동하지 않았다.

참고 : machine.config 파일을 내 컴퓨터 (Win XP)에 복사하고 거기에서 프록시 코드없이 .exe를 실행하면 정상적으로 작동합니다.

64 비트 OS와 다른 뭔가가 있습니까? 또한 서버에서 IE8을 열고 URI에 액세스 할 수 있습니다. 목표는 코드에 사용자 이름 암호를 제공 할 필요없이 프록시를 사전 인증하는 것입니다.

+0

비밀번호에 특수 문자를 포함하지 않아야 도움이되기를 바랍니다 ... 그것을 시도! –

답변

3

HttpWebRequest는 기본 Internet Settings (IE) 프록시를 사용하므로 서버의 Internet Explorer에서 정상적으로 작동하는 경우 동일한 사용자 계정으로 실행되는 경우 코드에서 확인해야합니다.

전 machine.config를 그대로 사용합니다.

IIS에서 확인할 수있는 한 가지 사항은 Windows 인증 애플릿의 공급자를 구성 할 수 있는지 여부입니다. 이 목록에 NTLM과 Kerberos가 공급자로 나열되어야합니다. NTLM이 변경된 경우 (예 : NTLM이 목록의 맨 위에있는 경우 Kerberos를 맨 위로 이동)과 같이 변경합니다. 죄송합니다.이 컴퓨터에 IIS가 없으므로 정확한 지침을 제공 할 수 없습니다.

여전히 어려움이 있다면 더 많은 단서를 위해 요청 및 응답 흐름을 캡처하려면 서버에서 피들러를 실행하는 것이 좋습니다.

+0

아무 것도 작동하지 않는 것 같습니다. 확인 된 IIS, Windows 인증에서 Negotiate 및 NTLM이 도움이되는 경우 – jlh3302

+1

코드가 필요하지 않으며 IE 설정을 사용했습니다. Fiddler를 사용하려고했기 때문에 Mine이 작동하지 않아 IE 프록시 설정이 변경되었습니다. Fiddler에서는 Rules/Automatically Authenticate를 선택하고 제 코드가 작동합니다. Fiddler를 닫은 후에는 IE 프록시 설정을 점검하여 그들이 다시 돌아올 수 있도록했습니다. 여전히 작동하는 것 같습니다. – jlh3302

5

@ David Moore가 맞습니다. 수동으로 탐색 할 때 IE가 잘 작동하면 req.Proxy.Credentials = CredentialCache.DefaultCredentials;을 추가하면 정상적으로 작동합니다.

Heres는 나를 위해 일하는 MSDN에서 가져온 수정 코드입니다.

using System; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string urlDemo = "http://en.wikipedia.org/wiki/Main_Page"; 
      // Create a request for the URL. 
      WebRequest request = WebRequest.Create(urlDemo); 
      // If required by the server, set the proxy credentials. 
      request.Proxy.Credentials = CredentialCache.DefaultCredentials; 
      // Get the response. 
      WebResponse response = request.GetResponse(); 
      // Display the status. 
      Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
      // Get the stream containing content returned by the server. 
      Stream dataStream = response.GetResponseStream(); 
      // Open the stream using a StreamReader for easy access. 
      StreamReader reader = new StreamReader(dataStream); 
      // Read the content. 
      string responseFromServer = reader.ReadToEnd(); 
      // Display the content. 
      Console.WriteLine(responseFromServer); 
      Console.ReadLine(); 
      // Clean up the streams and the response. 
      reader.Close(); 
      response.Close(); 

     } 
    } 
} 

그것은 ;-)

+0

흠 -이 코드는 WebRequest.Proxy와 함께 사용하거나 사용하지 않습니다. 그래서 나는 무엇이 시연되고 있는지 확신하지 못한다. –

+0

나는 407을 얻고 있었는데, 실제로 그것을 얻지 말았어야했는데, 그 다음에는 req.Proxy.Credentials = CredentialCache.DefaultCredentials * 라인을 추가하고 빙고를 제안했다. 그것은 그것을 고쳤다. – Cyberherbalist

관련 문제