Using PowerShell Invoke-WebRequest (with examples)
- Windows
- November 5, 2023
PowerShell’s Invoke-WebRequest
command is a powerful tool for performing HTTP/HTTPS requests to the web. In this article, we will explore different use cases of this command and provide code examples for each scenario.
Use Case 1: Downloading the contents of a URL to a file
To download the contents of a URL and save it to a file, you can use the following code:
Invoke-WebRequest http://example.com -OutFile path\to\file
Motivation: This use case is helpful when you want to download a file from a specific URL and save it to a local directory. It can be used for various purposes, such as downloading log files, scripts, or data files.
Explanation: The Invoke-WebRequest
command is used to send an HTTP GET request to the specified URL. The -OutFile
parameter specifies the path and filename where the downloaded file will be saved.
Example Output: The contents of the URL will be downloaded and saved to the specified file path.
Use Case 2: Sending form-encoded data (POST request of type application/x-www-form-urlencoded
)
To send form-encoded data in a POST request, you can use the following code:
Invoke-WebRequest -Method POST -Body @{ name='bob' } http://example.com/form
Motivation: This use case is useful when you need to send data to a web server using the application/x-www-form-urlencoded
format. It is commonly used for submitting form data or interacting with web APIs that expect this format.
Explanation: The Invoke-WebRequest
command is used to send an HTTP POST request to the specified URL. The -Method
parameter is set to POST
to indicate the type of request. The -Body
parameter is used to specify the form-encoded data as a hashtable.
Example Output: The server will receive the POST request with the form-encoded data and process it accordingly.
Use Case 3: Sending a request with an extra header, using a custom HTTP method
To send a request with an extra header and using a custom HTTP method, you can use the following code:
Invoke-WebRequest -Headers @{ X-My-Header = '123' } -Method PUT http://example.com
Motivation: Sometimes, you may need to send additional headers along with your request for authentication or other purposes. This use case allows you to include custom headers and use a custom HTTP method.
Explanation: The Invoke-WebRequest
command is used to send an HTTP request to the specified URL. The -Headers
parameter is used to include additional headers in the request, specified as a hashtable. The -Method
parameter is set to the desired custom HTTP method, such as PUT
.
Example Output: The server will receive the request with the custom header and method, which can be useful for specific server-side processing or authentication.
Use Case 4: Sending data in JSON format, specifying the appropriate content-type header
To send data in JSON format and specify the content-type header, you can use the following code:
Invoke-WebRequest -Body '{"name":"bob"}' -ContentType 'application/json' http://example.com/users/1234
Motivation: JSON (JavaScript Object Notation) is a widely used format for exchanging data between a client and a server. This use case allows you to send JSON data to a web server and specify the appropriate content-type header.
Explanation: The Invoke-WebRequest
command is used to send an HTTP request to the specified URL. The -Body
parameter is used to specify the data in JSON format. The -ContentType
parameter is set to 'application/json'
to indicate that the data being sent is in JSON format.
Example Output: The server will receive the request with the JSON data and can process it accordingly.
Use Case 5: Providing server authentication with a username and password
To provide server authentication by including a username and password, you can use the following code:
$credentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("myusername:mypassword"))
Invoke-WebRequest -Headers @{ Authorization = "Basic " + $credentials } http://example.com
Motivation: Some web servers require authentication to access certain resources. This use case allows you to provide server authentication by including a username and password in the request.
Explanation: The Invoke-WebRequest
command is used to send an HTTP request to the specified URL. The -Headers
parameter is used to include the Authorization header with the value in the format “Basic base64EncodedCredentials”. The ToBase64String
method is used to encode the username and password as base64.
Example Output: The server will receive the request with the provided authentication credentials. If the credentials are valid, the server will grant access to the requested resource.
Conclusion
In this article, we have explored different use cases of the PowerShell Invoke-WebRequest
command. We have provided code examples and explanations for each scenario, including downloading content, sending form-encoded data, including headers, sending JSON data, and providing server authentication. Understanding and utilizing these use cases can greatly enhance your ability to interact with web resources using PowerShell.