C#可以';不要从网站或服务发出http请求

本文关键字:服务 请求 http 网站 可以 | 更新日期: 2023-09-27 18:20:11

我正试图向谷歌分析服务器写一个简单的POST请求,这是我的代码:

        using (var client = new System.Net.WebClient())
        {

            var values = new System.Collections.Specialized.NameValueCollection();
            //values["v"] = "1";
            //values["t"] = "event";
            //values["tid"] = trackingID;
            //values["cid"] = clientID;
            //values["ec"] = eventCategory.ToString();
            //values["ea"] = eventAction.ToString();
            //values["el"] = eventAction.ToString();
            var endpointAddress = "http://www.google-analytics.com/collect";
            var response = client.UploadValues(endpointAddress, values);
            var responseString = System.Text.Encoding.Default.GetString(response);
        }

此代码在控制台应用程序中运行良好,但在网站应用程序(托管在IIS上或运行在Visual Studio 2013上)或WCF中(同样)则不然。我使用进行了检查

WindowsIdentity.GetCurrent()

在站点、WCF服务和应用程序中,每次DOMAIN和USERNAME都是我自己的,所以我认为这不是问题所在。我尝试过使用.NET模拟,但没有成功。

我尝试将应用程序池标识设置为我的用户ApplicationPoolIdentity或NetworkService,但没有成功。我还尝试将身份验证模式更改为匿名用户或Windows身份验证。我尝试过更改物理访问路径,但没有成功。我在一个代理后面工作,在家里我试过了,效果很好。

有人知道为什么它不起作用吗?

C#可以';不要从网站或服务发出http请求

在发出请求时尝试提供代理详细信息。假设你在代理后面。

    using (var client = new System.Net.WebClient())
    {
        WebProxy proxy = new WebProxy("localproxyIP:8080", true);
        proxy.Credentials = new NetworkCredential("domain''user", "password");
        WebRequest.DefaultWebProxy = proxy;
        client.Proxy = proxy;
        var values = new System.Collections.Specialized.NameValueCollection();
        //values["v"] = "1";
        //values["t"] = "event";
        //values["tid"] = trackingID;
        //values["cid"] = clientID;
        //values["ec"] = eventCategory.ToString();
        //values["ea"] = eventAction.ToString();
        //values["el"] = eventAction.ToString();
        var endpointAddress = "http://www.google-analytics.com/collect";
        var response = client.UploadValues(endpointAddress, values);
        var responseString = System.Text.Encoding.Default.GetString(response);
    }