una solucion respuesta para pagina estado error códigos código codigos codigo .net http powershell

.net - solucion - códigos de estado http pdf



Cómo obtener códigos de estado HTTP numéricos en PowerShell (4)

Sé de algunas buenas maneras de crear clientes web en PowerShell: las clases .NET System.Net.WebClient y System.Net.HttpWebRequest, o el objeto COM Msxml2.XMLHTTP. Por lo que puedo decir, el único que le da acceso al código de estado numérico (por ejemplo, 200, 404), es el último, el objeto COM. El problema que tengo es que no me gusta la forma en que funciona y no me gusta confiar en que el objeto COM esté allí. También sé que de vez en cuando Microsoft decidirá eliminar los objetos COM (bits de desactivación de ActiveX) debido a las vulnerabilidades de seguridad, etc.

¿Hay otro método .NET que me falta? ¿Está el código de estado en uno de estos otros dos objetos y no sé cómo obtenerlo?


Al usar las respuestas x0n y joshua ewer para completar el círculo con un ejemplo de código, espero que no sea tan malo:

$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


Me doy cuenta de que el título de la pregunta es sobre powershell, pero en realidad no es lo que se pregunta. De cualquier manera...

El WebClient es un envoltorio muy tonto para HttpWebRequest. WebClient es excelente si solo está haciendo un consumo muy simple de servicios o publicando un poco de Xml, pero la desventaja es que no es tan flexible como podría desear. No podrá obtener la información que está buscando en WebClient.

Si necesita el código de estado, consígalo en HttpWebResponse. Si estuvieras haciendo algo como esto (solo publicando una cadena en una URL) con cliente web:

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

entonces harías esto con HttpWebRequest para obtener el código de estado. La misma idea, solo más opciones (y por lo tanto más código).

//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;


Se ve muy facil

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

Puede encontrar los otros encabezados de respuesta disponibles en la propiedad ResponseHeaders (como content-type, content-length, x-powered-by y similares), y recuperar cualquiera de ellos mediante el método Item ().

... pero como Rob menciona a continuación, lamentablemente, la propiedad de estado no está disponible aquí


Utilice el tipo [system.net.httpstatuscode] enumerado.

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

Para obtener el código numérico, convierte a [int]:

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

Espero que esto ayude,

-Oisin