2012-03-29 17 views
5

Chcę uruchomić skrypt skrobania WWW na serwerze.Power Shell Web Scraping SSL/TSL Issue

Bieżący skrypt gromadzi kod HTML na określonej stronie.

$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 

Działa to dobrze na typowej stronie internetowej. Jednak chcę go uruchomić na stronie administratora serwera, która oczywiście wymaga logowania.

Pomyślałem, że zanim spróbuję się zalogować, spróbuję zeskrobać stronę logowania na serwerze. Uruchamiając powyższy skrypt otrzymuję następujący wynik.

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 

Każdy pomysł jak obejść ten problem, a może jeśli mógłby wskazać mi inny kierunek, więc mogę zeskrobać elementy z administratorem strony html z sever.

Dzięki!

Odpowiedz

23

Ten liner będzie ignorować błędy certyfikatów SSL:

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

Błędy związane z podpisem własnym niezaufanych certyfikatów, nazw niepasujące lub wygaśnięcia będą ignorowane po to jest wykonywany.

+0

Dziękuję bardzo! –

+7

I do przywrócenia, po prostu wykonaj '[System.Net.ServicePointManager] :: ServerCertificateValidationCallback = $ null' – mousio

+0

Dziękuję bardzo! – hupseb

0

Zastosowanie 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

Dzięki Mathias, Czy można przekonwertować na format Power Shell Script? –

+0

Po prostu skompiluj go ze źródła podczas działania w PoSH, jak tutaj: http://poshcode.org/624 –

+0

Fajne dzięki kolego! –

Powiązane problemy