1

ずっと前に .NET Framework 2.0 で VB を使用して開発されたレガシ HTTP クライアント アプリケーションがあります。最近、新しいプロキシ サーバーがネットワークに導入され、VB アプリが "407 Proxy Authentication Required" エラーに遭遇し始めました。

プロキシには NTLM 認証が必要ですが、プログラムはそれを考慮しませんでした。

いくつかの Web リソースをグーグルで調べた後、次のコードを書きました。

Dim proxy As New System.Net.WebProxy("http://my.proxy.com:81")
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
proxy.UseDefaultCredentials = true
webreq.Proxy = proxy

しかし、まだ 407 エラーが表示されます。ユーザーは Windows ドメインにログインしています。

私はいくつかの異なる(しかし同様の)方法を試しましたが、成功しません。

誰かが私が見逃しているかもしれないものを指摘できますか?

セキュリティ ポリシーの設定によって、これが機能しない可能性はありますか?

ネットワーク管理者に連絡することはできますが、彼はアプリケーション開発に精通しておらず、私も彼に何を尋ねたらよいかわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

これについても解決策を探しています。おそらくセキュリティ関連です。イントラネットのセキュリティ ゾーンにいますか? http://www.codinghorror.com/blog/2005/04/aspnet-ntlm-authentication---is-it-worth-it.html

これはhttp://bytes.com/topic/net/answers/544841-ntlm-authentication-howで見つけまし た。

public string SendRequest()
        // run the request and return a string response
        {
            string FinalResponse = "";
            string Cookie = "";

            NameValueCollection collHeader = new NameValueCollection();

            HttpWebResponse webresponse;

             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URI);

             request.KeepAlive = true;
            request.Timeout = 10000;
            request.Method = "POST";
            request.AllowAutoRedirect = false;
            request.Proxy = WebProxy.GetDefaultProxy();

            string addr = "http://" + ProxyServer + ":" + String.Format("{0:D}", ProxyPort);
            Uri u = new Uri(addr);

            CredentialCache wrCache = new CredentialCache();
            wrCache.Add(u, "Negotiate", System.Net.CredentialCache.DefaultNetworkCredentials);

            request.Proxy.Credentials = wrCache;

            try
            {
                byte[] bytes = Encoding.ASCII.GetBytes(Request);
                request.ContentLength = bytes.Length;

                Stream oStreamOut = request.GetRequestStream();
                oStreamOut.Write(bytes, 0, bytes.Length);
                oStreamOut.Close();

                webresponse = (HttpWebResponse)request.GetResponse();
                if (null == webresponse)
                {
                    FinalResponse = "No Response from " + URI;
                }
                else
                {
                    Encoding enc = System.Text.Encoding.GetEncoding(1252);
                    StreamReader rdr = new StreamReader(webresponse.GetResponseStream(),enc);
                    FinalResponse = rdr.ReadToEnd();
                }

            }//End of Try Block

            catch (WebException e)
            {
                // some kind of error..
                if (407 == (int)e.Status)
                {
                }

                throw CatchHttpExceptions(FinalResponse = e.Message);
            }
            catch (System.Exception e)
            {
                throw new Exception(FinalResponse = e.Message);
            }
            finally
            {
                // BaseHttp = null;
            }
            return FinalResponse;
        } //End of SendRequestTo method
于 2013-06-04T15:33:15.013 に答える