How to obtain numeric HTTP status codes in PowerShell

后端 未结 4 666
天命终不由人
天命终不由人 2021-01-30 17:35

I know of a few good ways to build web clients in PowerShell: the .NET classes System.Net.WebClient and System.Net.HttpWebRequest, or the COM object Msxml2.XMLHTTP. From what I

相关标签:
4条回答
  • 2021-01-30 18:12

    Using both x0n and joshua ewer's answers to come full circle with a code example, I hope that's not too bad form:

    $url = 'http://google.com'
    $req = [system.Net.WebRequest]::Create($url)
    
    try {
        $res = $req.GetResponse()
    } 
    catch [System.Net.WebException] {
        $res = $_.Exception.Response
    }
    
    $res.StatusCode
    #OK
    
    [int]$res.StatusCode
    #200
    
    0 讨论(0)
  • 2021-01-30 18:15

    Use the [system.net.httpstatuscode] enumerated type.

    ps> [enum]::getnames([system.net.httpstatuscode])
    Continue
    SwitchingProtocols
    OK
    Created
    Accepted
    NonAuthoritativeInformation
    NoContent
    ResetContent
    ...
    

    To get the numeric code, cast to [int]:

    ps> [int][system.net.httpstatuscode]::ok
    200
    

    Hope this helps,

    -Oisin

    0 讨论(0)
  • 2021-01-30 18:23

    It looks very easy

    $wc = New-Object NET.WebClient
    $wc.DownloadString($url)
    $wc.ResponseHeaders.Item("status")
    

    You can find the other available Response Headers in the ResponseHeaders property (like content-type, content-length, x-powered-by and such), and retrieve any of them via the Item() method.

    ... but as rob mentions below, sadly, the status property is not available here

    0 讨论(0)
  • 2021-01-30 18:28

    I realize the question's title is about powershell, but not really what the question is asking? Either way...

    The WebClient is a very dumbed down wrapper for HttpWebRequest. WebClient is great if you just doing very simple consumption of services or posting a bit of Xml, but the tradeoff is that it's not as flexible as you might want it to be. You won't be able to get the information you are looking for from WebClient.

    If you need the status code, get it from the HttpWebResponse. If you were doing something like this (just posting a string to a Url) w/ WebClient:

    var bytes = 
        System.Text.Encoding.ASCII.GetBytes("my xml"); 
    
    var response = 
        new WebClient().UploadData("http://webservice.com", "POST", bytes);
    

    then you'd do this with HttpWebRequest to get status code. Same idea, just more options (and therefore more code).

    //create a stream from whatever you want to post here
    var bytes = 
      System.Text.Encoding.ASCII.GetBytes("my xml"); 
    var request = 
      (HttpWebRequest)WebRequest.Create("http://webservice.com");
    
    //set up your request options here (method, mime-type, length)
    
    //write something to the request stream
    var requestStream = request.GetRequestStream();
    requestStream.Write(bytes, 0, bytes.Length);        
    requestStream.Close();
    
    var response = (HttpWebResponse)request.GetResponse();
    
    //returns back the HttpStatusCode enumeration
    var httpStatusCode = response.StatusCode;
    
    0 讨论(0)
提交回复
热议问题