I have inherited the following Python script:
import urllib2
a = urllib2.urlopen('http://mysite/mypage.aspx?action=dosomething')
a.read()
a.close()
and I would like to replace it with a powershell script. I have googled a little but everything I find launches a browser window.
This script is going to be scheduled, so I'd like to just "post and forget" if possible?
Any help very gratefully received :)
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();
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With