2013-05-31 20 views
7

Voglio provare a trasferire il mio script di bash da Linux a PowerShell ma non riesco a capire perché non è riuscito.Come fare wget con i cookie in PowerShell

di comando di Linux:

wget -q -x --user-agent="blablabla" --keep-session-cookies --load-cookies cook.txt http://site.com/qqq 

codice PowerShell:

$source = "http://site.com/qqq" 
$destination = "d:\site\qqq" 

$wc = New-Object System.Net.WebClient 
$wc.DownloadFile($source, $destination) 

ma questo codice di download unica pagina senza cookie. E non riesco a trovare come posso inviare PHPSESSID al sito.

Per favore, spiegami come si fa.

+0

Wget per Windows è un'opzione? http://superuser.com/questions/25538/what-is-the-windows-equivalent-of-wget – PeskyGnat

risposta

11

Ok, quindi avete due opzioni.

  1. Eseguire wget su Windows.
  2. Impostare le proprietà sull'oggetto webclient su replicare la funzionalità impostata dai flag wget.

Il primo è semplice, basta scaricare il Windows version of wget.

Ecco il codice per il secondo.

$source = "http://site.com/qqq" 
$destination = "d:\site\qqq" 

$wc = New-Object System.Net.WebClient 
# Single Example 
$wc.Headers.Add([System.Net.HttpRequestHeader]::Cookie, "name=value") 
# Multi Example 
$wc.Headers.Add([System.Net.HttpRequestHeader]::Cookie, "name=value; name2=value2"); 
$wc.DownloadFile($source, $destination) 

Cerca all'interno del file cookies.txt per ottenere le coppie valore nome.

Non so come replicare la funzionalità -x di wget. Dai una prova e prova a vedere cosa fa del file dopo il download.

Nota: non riesco a testarlo ...

+0

Molto interessante. Quando uso wget con i cookie, la pagina Web scaricata. Ma se utilizzo PowerShell con i cookie, non ho risultato. Forse ho bisogno di inviare i dati POST al sito? – user2441498

+1

@ user2441498 Usa il violinista per monitorare l'acquisizione di ciò che wget sta inviando al server. Nota: potrebbe essere necessario forzare wget a utilizzare un proxy. –

+0

Bel esempio! Tuttavia, per gli utenti di PowerShellCore (Windows nano server), lo spazio dei nomi System.Net.WebClient non sembra esserci, sfortunatamente. –