NAPSAL Tito 100. Cez powerShell sa dá aj mimo iného aj pristupovat k dátam z internetu pomocou HttpRequest-u .
NAPSAL Tito 100
Vytvorím si testovací script na serveri www.test.sk/request.php a do neho vložím kód
echo "GET:".$_GET["testget"]."`n".
"GET:".$_POST["testpost"];
?>
v powershell-e je to celkom jednoduché,
Stahovanie dát :
$wc = new-object net.WebClient
$url="http://kreveta.net/rss.xml"
$probe = $wc.downloadData($url)
$s = [text.encoding]::utf8.getString($probe)
$s
metóda GET:
$request = [Net.WebRequest]::Create("www.test.sk/request.php?testget=testujeme")
$response = $request.GetResponse()
$dataStream = $response.GetResponseStream()
$reader =new-object System.IO.StreamReader($dataStream)
$responseFromServer = $reader.ReadToEnd()
$response.close()
$dataStream.close()
$responseFromServer
Metóda POST:
$request = [Net.WebRequest]::Create("www.test.sk/request.php")
$request.Method="POST"
$request.ContentType="application/x-www-form-urlencoded"
$PostData="testpost=testujemeget"
$PostDataByte = [System.text.encoding]::utf8.GetBytes($PostData)
$request.ContentLength = $PostDataByte.Length
$streamPostData = $request.GetRequestStream()
$streamPostData.Write($PostDataByte,0,$PostDataByte.Length)
$streamPostData.close()
$response = $request.GetResponse()
$dataStream = $response.GetResponseStream()
$reader =new-object System.IO.StreamReader($dataStream)
$responseFromServer = $reader.ReadToEnd()
$response.close()
$dataStream.close()
$responseFromServer
Pre pohodlnú komunikáciu je dobré si zvolit jeden zo štandardov. ja som si zvolil můj oblúbený JSON.
náš php kód si zmením na :
echo
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
;
?>
kód v PS
Add-Type -Assembly System.ServiceModel.Web,System.Runtime.Serialization
function Convert-JsonToXml([string]$json)
{
$bytes = [byte[]][char[]]$json
$quotas = [System.Xml.XmlDictionaryReaderQuotas]::Max
$jsonReader = [System.Runtime.Serialization.Json.JsonReaderWriterFactory]::CreateJsonReader($bytes,$quotas)
try
{
$xml = new-object System.Xml.XmlDocument
$xml.Load($jsonReader)
$xml
}
finally
{
$jsonReader.Close()
}
}
$wc = new-object net.WebClient
$url="www.test.sk/request.php"
$probe = $wc.downloadData($url)
$str = [text.encoding]::utf8.getString($probe)
$xml = Convert-JsonToXml $str
echo $xml.root.glossary.title
echo $xml.root.glossary.GlossDiv.title
echo $xml.root.glossary.GlossDiv.GlossList.GlossEntry.GlossTerm
NAPSAL Tito 100
Vytvorím si testovací script na serveri www.test.sk/request.php a do neho vložím kód
echo "GET:".$_GET["testget"]."`n".
"GET:".$_POST["testpost"];
?>
v powershell-e je to celkom jednoduché,
Stahovanie dát :
$wc = new-object net.WebClient
$url="http://kreveta.net/rss.xml"
$probe = $wc.downloadData($url)
$s = [text.encoding]::utf8.getString($probe)
$s
metóda GET:
$request = [Net.WebRequest]::Create("www.test.sk/request.php?testget=testujeme")
$response = $request.GetResponse()
$dataStream = $response.GetResponseStream()
$reader =new-object System.IO.StreamReader($dataStream)
$responseFromServer = $reader.ReadToEnd()
$response.close()
$dataStream.close()
$responseFromServer
Metóda POST:
$request = [Net.WebRequest]::Create("www.test.sk/request.php")
$request.Method="POST"
$request.ContentType="application/x-www-form-urlencoded"
$PostData="testpost=testujemeget"
$PostDataByte = [System.text.encoding]::utf8.GetBytes($PostData)
$request.ContentLength = $PostDataByte.Length
$streamPostData = $request.GetRequestStream()
$streamPostData.Write($PostDataByte,0,$PostDataByte.Length)
$streamPostData.close()
$response = $request.GetResponse()
$dataStream = $response.GetResponseStream()
$reader =new-object System.IO.StreamReader($dataStream)
$responseFromServer = $reader.ReadToEnd()
$response.close()
$dataStream.close()
$responseFromServer
Pre pohodlnú komunikáciu je dobré si zvolit jeden zo štandardov. ja som si zvolil můj oblúbený JSON.
náš php kód si zmením na :
echo
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
;
?>
kód v PS
Add-Type -Assembly System.ServiceModel.Web,System.Runtime.Serialization
function Convert-JsonToXml([string]$json)
{
$bytes = [byte[]][char[]]$json
$quotas = [System.Xml.XmlDictionaryReaderQuotas]::Max
$jsonReader = [System.Runtime.Serialization.Json.JsonReaderWriterFactory]::CreateJsonReader($bytes,$quotas)
try
{
$xml = new-object System.Xml.XmlDocument
$xml.Load($jsonReader)
$xml
}
finally
{
$jsonReader.Close()
}
}
$wc = new-object net.WebClient
$url="www.test.sk/request.php"
$probe = $wc.downloadData($url)
$str = [text.encoding]::utf8.getString($probe)
$xml = Convert-JsonToXml $str
echo $xml.root.glossary.title
echo $xml.root.glossary.GlossDiv.title
echo $xml.root.glossary.GlossDiv.GlossList.GlossEntry.GlossTerm
NAPSAL Tito 100
Komentáře
Přidat nový
Pro přispívání musíte být přihlášen
Zapsal Likandro - 01.01.2012 21:43
Kvůli spamu jsem musel nahradit Titův článek novým.



