2012-03-29 11 views
5

Quiero ejecutar un script de web scraping en un servidor.Power Shell Web Scraping SSL/TSL Issue

El script actual recoge el html en la página especificada.

$url = "http://websms" 
[net.httpWebRequest] $request = [net.webRequest]::create($url) 
[net.httpWebResponse] $response = $request.getResponse() 
$responseStream = $response.getResponseStream() 
$sr = new-object IO.StreamReader($responseStream) 
$result = $sr.ReadToEnd() 

$result 

Esto funciona bien en una página web típica. Sin embargo, quiero ejecutarlo en una página de administración de servidores que, por supuesto, requiere un inicio de sesión.

Pensé antes de intentar iniciar sesión Intentaré y raspar la página de inicio de sesión del servidor. Ejecutando el script anterior obtengo el siguiente resultado.

Exception calling "GetResponse" with "0" argument(s): "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel." 
At C:\temp\web3.ps1:3 char:56 
+ [net.httpWebResponse] $response = $request.getResponse <<<<() 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

Cualquier idea de cómo solucionar este problema o tal vez si me podría apuntar una dirección diferente para que pueda raspar elementos de la página de administración HTML del Servidor.

Gracias Chicos!

Respuesta

23

Ésta forro ignorará los errores de certificado SSL:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} 

Errores con respecto certificados no confiables de firma propia, nombres desalineamientos o de vencimiento serán ignorados después de esto se ejecuta.

+0

¡Muchas gracias! –

+7

Y para restaurar, simplemente ejecute '[System.Net.ServicePointManager] :: ServerCertificateValidationCallback = $ null' – mousio

+0

¡Muchas gracias! – hupseb

0

Uso this brilliant answer:

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) 
{ 
    return true; 
} 
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 
+0

Gracias Mathias, ¿Se puede convertir a un formato Power Shell Script? –

+0

Simplemente compile desde la fuente cuando se ejecuta en PoSH, como aquí: http://poshcode.org/624 –

+0

¡Gracias, amigo! –