从特定服务器发送时拒绝HttpWebRequest

时间:2013-07-12 16:57:24

标签: c# httpwebrequest

我有一个基本程序,它利用特定的API为云托管提供商。该程序生成一个HttpWebRequest,它基本上就像是对云中某个服务器执行操作的请求(例如,关闭它,启动它)。

我遇到的问题是,当我从本地计算机执行脚本时,脚本可以正常工作,但是当我从我们的某个生产服务器执行脚本时,脚本无效。有问题的服务器是Windows 2008 R2框(虚拟/托管),如果我可以让这个脚本在那里工作,它将成为脚本主机。

有趣的是,此脚本之前在生产环境中工作(通过Windows任务计划程序自动执行)至少几周。然后,突然间,它昨天停止了工作。没有我知道的服务器更改,但我不是唯一一个可以访问环境的服务器,因此可以在那里进行更改。我有点担心可能是某些安全或防火墙设置导致了这个问题。我们最近安装了新的病毒防护软件,因此这是一个潜在的罪魁祸首。

  1. 这个HttpWebRequest在某种程度上不合适会导致它被阻止或以某种方式失败吗?
  2. 是否存在我应检查的特定服务器设置,可能会对此特定程序产生负面影响?
  3. 这是我的代码:

    using System;
    using System.Net;
    using System.Text;
    
    class Script {
    
        static void Main(string[] args) {
    
            string organizationId = args[0];
            string serverId = args[1];
            string serverCommand = args[2];
            string username = args[3];
            string password = args[4];
            string credentials = username + ":" + password;
            credentials = Convert.ToBase64String(Encoding.Default.GetBytes(credentials));
    
            //send command to server
            Uri uri = new Uri("https://api.opsourcecloud.net/oec/0.9/" + organizationId + "/server/" + serverId + "?" + serverCommand);
            HttpWebRequest serverRequest = (HttpWebRequest)WebRequest.Create(uri);
            serverRequest.Headers["Authorization"] = "Basic " + credentials;
            HttpWebResponse serverResponse = (HttpWebResponse)serverRequest.GetResponse();
    
        }
    
    }
    

    这是我的错误:

    Unhandled Exception: System.Net.WebException: Unable to connect to the remote se
    rver ---> System.Net.Sockets.SocketException: No connection could be made becaus
    e the target machine actively refused it 168.143.82.65:443
       at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre
    ss socketAddress)
       at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Sock
    et s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state,
    IAsyncResult asyncResult, Int32 timeout, Exception& exception)
       --- End of inner exception stack trace ---
       at System.Net.HttpWebRequest.GetResponse()
       at Script.Main(String[] args)
    

1 个答案:

答案 0 :(得分:0)

您的Authorization标题似乎存在问题。请尝试使用NetworkCredential代替您的请求:

serverRequest.Credentials = new NetworkCredential(username, password);