User powershell script to post to URL?
Here is a script I wrote a while back that shows how to post tweets with Geotags. This uses WebClient.
http://www.ravichaganti.com/blog/?p=979
Pasting the code here for easy reference.
Function ByPass-Proxy { param ([string]$url) $webClient.Proxy.IsBypassed($url)}Function Get-GeoCoordinates { param ([String]$location) $baseURL = "http://maps.google.com/maps/geo?q=" $apiKey = "Your API Key" $url = $baseURL + $location + "&output=xml&sensor=false&key=" + $apiKey $locCoords = (([xml]($WebClient.DownloadString($url))).kml.Response.Placemark.Point.coordinates) return $locCoords}Function Send-Tweet { param ([string]$Tweet,[string]$location) $geoCoord = Get-GeoCoordinates $location $long = $geoCoord.Split(",")[0] $lat = $geoCoord.Split(",")[1] $TwitURL = "http://twitter.com/statuses/update.xml" $WebClient.Credentials = $TwitCredentials #$str = [System.Text.Encoding]::UTF8.GetBytes( "status=" + $Tweet + "&lat=" + $lat + "&long=" + $long ) $str = "status=" + $Tweet + "&lat=" + $lat + "&long=" + $long [System.Net.ServicePointManager]::Expect100Continue = $false $response = $WebClient.UploadString($TwitURL,$str) $response}function Get-Credential { ## Grabbed this from http://poshcode.org/1480[CmdletBinding(DefaultParameterSetName="Better")]PARAM( [Parameter(Position=1,Mandatory=$false)] [Alias("Credential")] [PSObject]$UserName=$null, [Parameter(Position=2,Mandatory=$false)] [string]$Title=$null, [Parameter(Position=3,Mandatory=$false)] [string]$Message=$null, [Parameter(Position=4,Mandatory=$false)] [string]$Domain=$null, [Parameter(Mandatory=$false)] [switch]$GenericCredentials, [Parameter(Mandatory=$false)] [switch]$Inline)PROCESS { if( $UserName -is [System.Management.Automation.PSCredential]) { return $UserName } elseif($UserName -ne $null) { $UserName = $UserName.ToString() } if($Inline) { if($Title) { Write-Host $Title } if($Message) { Write-Host $Message } if($Domain) { if($UserName -and $UserName -notmatch "[@\\]") { $UserName = "${Domain}\${UserName}" } } if(!$UserName) { $UserName = Read-Host "User" if(($Domain -OR !$GenericCredentials) -and $UserName -notmatch "[@\\]") { $UserName = "${Domain}\${UserName}" } } return New-Object System.Management.Automation.PSCredential $UserName,$(Read-Host "Password for user $UserName" -AsSecureString) } if($GenericCredentials) { $Credential = "Generic" } else { $Credential = "Domain" } ## Now call the Host.UI method ... if they don't have one, we'll die, yay. ## BugBug? PowerShell.exe disregards the last parameter $Host.UI.PromptForCredential($Title, $Message, $UserName, $Domain, $Credential,"Default")}}$global:webClient = New-Object System.Net.WebClient$global:TwitCredentials = Get-Credential -title "Twitter Credentials" -message "Please enter your Twitter username/password"If (!(ByPass-Proxy "http://www.twitter.com")) { $global:Webclient.proxy.Credentials = Get-Credential -title "Proxy Credentials" -message "Please enter username/password for Proxy authentication"}
Function urlopen
looks like HTTP GET. Then you can use WebClient
:
$w = New-Object net.webclient$w.DownloadString('http://mysite/mypage.aspx?action=dosomething')
For HTTP POST I use this function:
function Execute-HTTPPostCommand(){ param( [string] $url = $null, [string] $data = $null, [System.Net.NetworkCredential]$credentials = $null, [string] $contentType = "application/x-www-form-urlencoded", [string] $codePageName = "UTF-8", [string] $userAgent = $null ); if ( $url -and $data ) { [System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url); $webRequest.ServicePoint.Expect100Continue = $false; if ( $credentials ) { $webRequest.Credentials = $credentials; $webRequest.PreAuthenticate = $true; } $webRequest.ContentType = $contentType; $webRequest.Method = "POST"; if ( $userAgent ) { $webRequest.UserAgent = $userAgent; } $enc = [System.Text.Encoding]::GetEncoding($codePageName); [byte[]]$bytes = $enc.GetBytes($data); $webRequest.ContentLength = $bytes.Length; [System.IO.Stream]$reqStream = $webRequest.GetRequestStream(); $reqStream.Write($bytes, 0, $bytes.Length); $reqStream.Flush(); $resp = $webRequest.GetResponse(); $rs = $resp.GetResponseStream(); [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs; $sr.ReadToEnd(); }}
Starting with PowerShell v3, you can use Invoke-WebRequest
or its alias iwr
.
iwr 'http://mysite/mypage.aspx?action=dosomething'
If you need the output the same as the Python script, use the Content
property of the response.
(Invoke-WebRequest 'http://mysite/mypage.aspx?action=dosomething').Content
As @stej wrote, the Python code looks like a GET, but if you do need POST you can use the Method
parameter.
iwr 'http://mysite/mypage.aspx?action=dosomething' -Method Post