PoshCode Logo PowerShell Code Repository

Get-WebFile 3.0 (modification of post by Joel Bennett view diff)
View followups from Joel Bennett | diff | embed code: <script type="text/javascript" src="http://PoshCode.org/embed/169"></script>download | new post

A complete rewrite of my wget script to use HttpWebRequest and Response to figure out the filename

  1. ## Get-WebFile.ps1 (aka wget for PowerShell)
  2. ##############################################################################################################
  3. ## Downloads a file or page from the web
  4. ## History:
  5. ## v3 - rewritten completely using HttpWebRequest + HttpWebResponse to figure out the file name, if possible
  6. ##############################################################################################################
  7. #function wget {
  8.    param(
  9.       $url = "http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fprdownloads.sourceforge.net%2Fsquirrelmail%2Fsquirrelmail-1.4.13.tar.bz2",
  10.       $fileName
  11.    )
  12.    
  13.    $req = [System.Net.HttpWebRequest]::Create($url);
  14.    $res = $req.GetResponse();
  15.  
  16.    if($fileName -and !(Split-Path $fileName)) {
  17.       $fileName = Join-Path (Get-Location -PSProvider "FileSystem") $fileName
  18.    }
  19.    elseif(($fileName -eq $null) -or (Test-Path -PathType "Container" $fileName))
  20.    {
  21. #  if( -and !((Test-Path -PathType "Leaf" $fileName) -or ((Test-Path -PathType "Container" (Split-Path $fileName)) -and -not )))
  22.       [string]$fileName = ([regex]'(?i)filename=(.*)$').Match( $res.Headers["Content-Disposition"] ).Groups[1].Value
  23.       $fileName = $fileName.trim("\/")
  24.       if(!$fileName) {
  25.          $fileName = $res.ResponseUri.Segments[-1]
  26.          $fileName = $fileName.trim("\/")
  27.          if(!$fileName) {
  28.             $fileName = Read-Host "Please provide a file name"
  29.          }
  30.          $fileName = $fileName.trim("\/")
  31.          if(!([IO.FileInfo]$fileName).Extension) {
  32.             $fileName = $fileName + "." + $res.ContentType.Split(";")[0].Split("/")[1]
  33.          }
  34.       }
  35.       $fileName = Join-Path (Get-Location -PSProvider "FileSystem") $fileName
  36.    }
  37.  
  38.    if($res.StatusCode -eq 200) {
  39.       $reader = new-object System.IO.StreamReader $res.GetResponseStream()
  40.       $writer = new-object System.IO.StreamWriter $fileName
  41.       # TODO: stick this in a loop and give progress reports
  42.       $writer.Write($reader.ReadToEnd())
  43.      
  44.       $reader.Close();
  45.       $writer.Close();
  46.    }
  47.    $res.Close();
  48.    ls $fileName
  49. #}

Submit a correction or amendment below (
click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:


Remember me