Comandi equivalenti a cURL e Wget per Windows command-line con Powershell Una valida alternativa ai noti comandi LINUX GNU cURL e Wget su Windows e Windows Server grazie allo strumento Powershell

Comandi equivalenti a cURL e Wget per Windows command-line con Powershell

Oggi ho avuto necessità di eseguire una serie di richieste HTTP tramite uno script da linea di comando su un server Windows. Se avessi avuto a disposizione un OS Linux avrei potuto risolvere la cosa utilizzando il noto comando cURL, più o meno nel seguente modo:

Sfortunatamente Windows non dispone di un comando analogo: lo strumento che più gli si avvicina – il poco noto BITSAdmin Tool – è pensato per lavorare a task e job, quindi può rivelarsi poco pratico nel contesto di una esecuzione tramite script.

Fortunatamente, grazie a Powershell, è possibile ricorrere a un’alternativa molto più semplice – e decisamente più potente – utilizzando le classi esposte dal namespace System.Net, tra cui l’arcinoto – per chi programma in ASP.NET – System.Net.WebClient.

cURL

Per emulare il comportamento del comando Linux  cURL, è sufficiente creare un file cURL.ps1 contenente la seguente riga di codice:

In questo modo il contenuto del response HTTP ci verrà restituito sotto forma di stringa. Nel caso in cui volessimo invece averlo come array di byte, è possibile utilizzare il metodo DownloadData, che funziona nello stesso modo:

Wget

Per emulare il comportamento del comando Linux  Wget, è sufficiente creare un file wget.ps1 contenente la seguente riga di codice:

Come si può facilmente vedere, la tecnica utilizzata è sempre la medesima: in questo caso utilizzeremo il metodo DownloadFile, che consente di specificare un percorso di destinazione per il file che ci sarà restituito dal server.

Ignorare gli errori di certificato SSL

Nell’improbabile caso in cui avessimo bisogno di indirizzare le nostre request HTTP verso server o servizi HTTPS con un certificato non valido o non firmato da una autorità di certificazione attendibile – ad esempio, per inviare richieste a servizi ad uso esclusivamente interno dotati di certificati auto-firmati – è possibile utilizzare la proprietà ServicePointManager.ServerCertificateValidationCallback, anch’essa fornita dal namespace System.Net, per disabilitare i controlli di trust del protocollo SSL.

Per far sì che questo accada, è sufficiente ggiungere la seguente riga di codice alle istruzioni descritte in precedenza:

Ecco quindi i comandi aggiornati:

Per il momento è tutto: spero che queste informazioni potranno esservi utili con le vostre request!

 

RELATED POSTS

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane.

View all posts by Ryan