powershell invoke-webrequest with codepage win 1251 - powershell

I need to get data from a page that has the win-1251 codepage.
$SiteAdress = "http://www.gisinfo.ru/download/download.htm"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
echo $HttpContent
And it shows me:
> StatusCode : 200 StatusDescription : OK Content :
> <!DOCTYPE html>
> <html><!-- #BeginTemplate "/Templates/panorama.dwt" --><!-- DW6 -->
> <head>
> <!-- #BeginEditable "doctitle" -->
> <title>ÃÈÑ ÏÀÍÎÐÀÌÀ - Ñêà÷àòü ïðîãðàììû</title>
> <meta name="keywords" con... RawContent : HTTP/1.1 200 OK
> Transfer-Encoding: chunked
> Connection: keep-alive
> Keep-Alive: timeout=20
> Content-Type: text/html
> Date: Fri, 16 Oct 2015 12:40:45 GMT
> Server: nginx/1.5.7
> X-Powered-By: PHP/5.2.17...
Title is Cyrillic. I have tried the variant below, but the result is the same.
$HttpContent = Invoke-WebRequest -URI $SiteAdress -ContentType "text/html; charset=windows-1251"

The -ContentType parameter to Invoke-WebRequest sets the content type for the request, not the response. Since you don't sent any content with your request it's quite irrelevant here.
I didn't find an easy way of enforcing a particular encoding for the response. Since the encoding is only specified within the HTML, and not the response header, there's little you can do here, I fear, as Invoke-WebRequest isn't smart enough to figure that out on its own.
You can, however, convert the text you read:
filter Convert-Encoding {
$1251 = [System.Text.Encoding]::GetEncoding(1251)
$1251.GetString([System.Text.Encoding]::Default.GetBytes($_))
}
$HttpContent.Content | Convert-Encoding
will then yield the proper Cyrillic text.
<!DOCTYPE html>
<html><!-- #BeginTemplate "/Templates/panorama.dwt" --><!-- DW6 -->
<head>
<!-- #BeginEditable "doctitle" -->
<title>ГИС ПАНОРАМА - Скачать программы</title>
<meta name="keywords" content="ГИС, карта, геодезия, картография, фотограмметрия, топография, электронная карта, классификатор, трехмерное моделирование, модель местности, карта Москвы, Ногинск, кадастр, межевое дело, Гаусс, эллипсоид Красовского, 1942, оротофотоснимок, WGS, растр, план, схема, бланковка, фотодокумент, земля, право, документация, map, sit, mtw, mtr, rsw, rsc, s57, s52, gis, 2003, 2004, Tool, Kit">
<meta name="description" content="Новые версии ГИС Карта 2000, GIS ToolKit , СУРЗ Земля и Право, документации, библиотек и примеров электронных карт">
<!-- #EndEditable -->
In any case, you need to know the exact encoding beforehand, regardless of how you solve it. You could try finding it in the HTML source, though:
[Regex]::Matches($HttpContent.Content, 'text/html;\s*charset=(?<encoding>[1-9a-z-]+)')
[System.Text.Encoding]::GetEncoding can cope with a string like windows-1251, at least.

My working variant:
$client = New-Object System.Net.WebClient
$url = "http://www.gisinfo.ru/download/download.htm"
$results = [System.Text.Encoding]::GetEncoding('windows-1251').GetString([Byte[]]$client.DownloadData($url))
Thanks Joey for help

Related

Google API - Oauth Refresh Token - Powershell

I'm writing a script that will download Google sheets using an Oauth access token. The script works just fine, but I'm having issues refreshing my access token.
Every guide I have found online shows me some iteration of the following:
$refreshTokenParams = #{
client_id=$clientId;
client_secret=$secret;
refresh_token=$refreshToken;
grant_type='refresh_token';
}
$refreshedToken = Invoke-WebRequest -Uri "https://accounts.google.com/o/oauth2/token" -Method POST -Body $refreshTokenParams
$accesstoken = $refreshedToken.access_token
When I run this script it returns the following:
StatusCode : 200
StatusDescription : OK
Content : <!doctype html><html lang="en" dir="ltr"><head><base href="https://accounts.google.com/"><script data-id="_gd" nonce="<Hidden just in case>">window.WIZ_global_data =
{"Mo6CHc":-<Hidden just in case>,"O...
RawContent : HTTP/1.1 200 OK
X-Frame-Options: DENY
Vary: Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site
google-accounts-embedded: 1
Pragma: no-cache
Transfer-Encoding: chunked
Strict-Transport-Security: max-...
Forms : {}
Headers : {[X-Frame-Options, DENY], [Vary, Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site], [google-accounts-embedded, 1], [Pragma, no-cache]...}
Images : {}
InputFields : {}
Links : {#{innerHTML=Learn more; innerText=Learn more; outerHTML=Learn more;
outerText=Learn more; tagName=A; href=https://developers.google.com/identity/protocols/oauth2; target=_blank; jsname=erTfTe}, #{innerHTML=Help; innerText=Help; outerHTML=<A
href="https://support.google.com/accounts?hl=en" target=_blank>Help</A>; outerText=Help; tagName=A; href=https://support.google.com/accounts?hl=en; target=_blank},
#{innerHTML=Privacy; innerText=Privacy; outerHTML=<A href="https://accounts.google.com/TOS?loc=US&hl=en&privacy=true" target=_blank>Privacy</A>; outerText=Privacy;
tagName=A; href=https://accounts.google.com/TOS?loc=US&hl=en&privacy=true; target=_blank}, #{innerHTML=Terms; innerText=Terms; outerHTML=<A
href="https://accounts.google.com/TOS?loc=US&hl=en" target=_blank>Terms</A>; outerText=Terms; tagName=A; href=https://accounts.google.com/TOS?loc=US&hl=en; target=_blank}}
ParsedHtml : System.__ComObject
RawContentLength : 1759969
When I save this output to an HTML file, I get this
Error 400: invalid_request
The error says "Required parameter is missing: response_type"
This Google doc mentions response_type='code' and I've added that to my array and that had no impact.
I feel like this section in the guide SHOULD work, but it doesnt. Unless maybe I'm implementing it wrong?
I have tried using "Invoke-restmethod" while specifying the content type to json/application, I've used alternative URIs and I've quadruple checked my client ID and password. I have no idea what I'm doing wrong.
If anyone has experience with refreshing Oauth access tokens using Powershell I would really appreciate your help.
Thanks in advance
I wrote this a while ago for gmail api GmailSendMail.psi
The issue is how you are sending the post body. It needs to be in the query parameters format.
function RefreshAccessToken([string]$clientId,[string]$secret, [string]$refreshToken){
$data = "client_id=$clientId&client_secret=$secret&refresh_token=$refreshToken&grant_type=refresh_token"
try {
$response = Invoke-RestMethod -Uri https://www.googleapis.com/oauth2/v4/token -Method POST -Body $data
return $response.access_token;
} catch {
# Dig into the exception to get the Response details.
# Note that value__ is not a typo.
Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
}
}
Let me know if you have any issues i will see if i cant update it for you.

Attachment missing in MTOM response from Citrus SOAP server simulation

I have built a sample Citrus testcase to simulate a SOAP server that responds with an MTOM attachment.
runner.soap(action -> action.server("simulationServer")
.receive()
...[validation etc]
);
runner.soap(action -> action.server("simulationServer")
.send()
.name("get-response")
.mtomEnabled(Boolean.TRUE)
.attachment("myAttachment", "application/octet-stream", new ClassPathResource("testfiles/myAttachment.pdf"))
.payload("<getResponse xmlns:xmime=\"http://www.w3.org/2005/05/xmlmime\">\n" +
" <document>\n" +
" <contentElements>\n" +
" <contentElement xmime:contentType=\"application/pdf\">cid:myAttachment</contentElement>\n" +
" </contentElements>\n" +
" <id>Test</id>\n" +
" </document>\n" +
"</getResponse>\n")
);
When I run this test and call the Citrus simulation with SoapUI, I see the contents of myAttachment.pdf in the debug logs. So at least it looks like Citrus tries to send the attachment.
However, in SoapUI I do not get an attachment. There is a XOP element in the SOAP response, but no attachment. The RAW view of SoapUI of the Citrus response looks like this.
HTTP/1.1 200 OK
Date: Tue, 16 Jan 2018 15:30:36 GMT
Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
SOAPAction: ""
Content-Type: Multipart/Related; boundary="----=_Part_0_382348859.1516116636524"; type="application/xop+xml"; start-info="text/xml"
Transfer-Encoding: chunked
Server: Jetty(9.4.6.v20170531)
------=_Part_0_382348859.1516116636524
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><getResponse xmlns:xmime="http://www.w3.org/2005/05/xmlmime">
<document>
<contentElements>
<contentElement xmime:contentType="application/pdf"><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:myAttachment"/></contentElement>
</contentElements>
<id>Test</id>
</document>
</getResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
------=_Part_0_382348859.1516116636524--
In an MTOM response with attachment the attachment starts where this RAW view ends. It should continue like this
------=_Part_0_382348859.1516116636524-- [last line from above]
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-ID: <myAttachment>
%PDF-1.4... [PDF content]
I am using Citrus 2.7.2 release.
Update
Still no success on this. Wireshark shows the same picture as SoapUI: the attachment is missing in the response.
However, when I debug into the code on the server (Citrus) side, I see the attachment in the response message until I get lost somewhere in a MessageSendingTemplate. Same on the console log. The message has the attachment.
There is an inline MTOM variant in the Citrus documentation, but I can't find a way to set this mtom-inline on the attachment in Java config.
Any hints, where to set a breakpoint to find where the attachment get lost? Or any other suggestions/examples on the Citrus side?
The setMtomInline field sits on the SoapAttachment interface. I am not sure if I got the setup right - but seems to work for inlined attachements - fails for soap attachements / multipart. The SoapUI Mock does not show any attachements when receiving requests from following testcase.
SoapAttachment soapAttachment = new SoapAttachment();
soapAttachment.setMtomInline(false);
soapAttachment.setContentResourcePath("log4j.xml");
soapAttachment.setContentType("application/octet-stream");
soapAttachment.setContentId("FILE");
SoapMessage soapMessage = new SoapMessage();
soapMessage.mtomEnabled(true);
soapMessage.soapAction("/HelloService/sayHello");
soapMessage.setPayload(
"<ht:HelloRequest " +
"xmlns:ht=\"http://citrusframework.org/schemas/samples/HelloMtomService\" " +
"xmlns:xop=\"http://www.w3.org/2004/08/xop/include\" >\n" +
" <ht:Message>Hei .. citrus does stream mtom</ht:Message>\n" +
" <ht:Data><xop:Include href=\"cid:FILE\"/></ht:Data>\n" +
"</ht:HelloRequest>");
soapMessage.addAttachment(soapAttachment);
runner.soap(action -> {
action.client("helloMtomSoapuiClient")
.send()
.soapAction("/HelloService/sayHello")
.message(soapMessage);
});
If I do the same for MtomInline set to true, I see the attachement as base64 encoded content text in the ht:Data node.
SoapAttachment soapAttachment = new SoapAttachment();
soapAttachment.setContentResourcePath("log4j.xml");
soapAttachment.setMtomInline(true);
soapAttachment.setContentType("application/xml");
soapAttachment.setContentId("MyAttachement");
soapAttachment.setEncodingType("base64Binary");
runner.soap(action -> {
action.client("helloMtomSoapuiClient")
.send()
.soapAction("/HelloService/sayHello")
.mtomEnabled(true)
.payload("<ht:HelloRequest xmlns:ht=\"http://citrusframework.org/schemas/samples/HelloMtomService\">\n" +
" <ht:Message>Hei .. citrus does mtom</ht:Message>\n" +
" <ht:Data>cid:MyAttachement</ht:Data>\n" +
"</ht:HelloRequest>")
.attachment(soapAttachment);
});
Either soapUI or citrus swallows the attachement. Some help or working JavaDSL sample would be nice.
It was actually a bug that will be fixed in Citrus 2.7.4 release. See https://github.com/christophd/citrus/issues/328
The inline MTOM variant with XML config works for me in the current release.
<ws:send endpoint="simulationServer" mtom-enabled="true">
<message>
<resource file="testfiles/simulation/get-response.xml" />
</message>
<ws:attachment content-id="myAttachment" content-type="application/octet-stream" mtom-inline="true" encoding-type="base64Binary">
<ws:resource file="classpath:testfiles/myAttachment.pdf"/>
</ws:attachment>
</ws:send>

Invoke-RestMethod in Powershell only returning inner entry elements and not feed

I am calling Powershell's Invoke-RestMethod on a feed with the following structure
<feed>
<id>feed id</id>
<author><name>John Smith</name></author>
<title>Feed title</title>
<updated>2017-03-17T12:57:28.898Z</updated>
<link href="url A" rel="value A"/>
<link href="url B" rel="value B"/>
... other elements ...
<entry>
<id>entry id</id>
<author><name>John Smith</name></author>
<title>Entry title</title>
<updated>2017-03-17T12:57:28.898Z</updated>
<link href="url C" rel="value C"/>
<link href="url D" rel="value D"/>
... other elements ...
</entry>
</feed>
I am using the following function
$xml = Invoke-RestMethod -Method Get -Uri $Url -ContentType "application/atom+xml" -Credential $credentials
I get a successful response, but it only includes the <entry> element and not the <feed> element, and I need the values of the "url A" and "url B" links which are therefore not returned.
Normally I would say what I have tried at this point, but since I've found nothing on the internet, these are the only things I've tried.
Changing the request content type to "text/xml" - no change in the result.
Calling $xml.ParentNode and $xml.OwnerDocument in attempt to get the <feed> element, but it was not available.
How can I get the <feed> level elements?
My Powershell version is 5.1.14393.953
Thanks
Invoke-RestMethod only returns the entries in a rss or atom-feed, as stated on MSDN:
Windows PowerShell formats the response based to the data type. For an
RSS or ATOM feed, Windows PowerShell returns the Item or Entry XML
nodes. For JavaScript Object Notation (JSON) or XML, Windows
PowerShell converts (or deserializes) the content into objects.
You can use Invoke-WebRequest to read the original xml and access the feed-element. Ex.
$xml = [xml](Invoke-WebRequest -Uri $url -Credential $credentials)
Sample output:
PS> $xml.feed
xmlns : http://www.w3.org/2005/Atom
title : VG ATOM Feed
link : {link, link}
id : http://www.vg.no/rss/feed/forsiden/?format=atom
updated : 2017-03-19T18:36:56+01:00
entry : {entry, entry, entry, entry...}

How To Produce HTML Table of Filehashes - with Relative Path Only?

I want to generate a HTML table that shows a filehash (sha1) of a bunch of files in a directory; I want the filenames to be relative to my current directory - not absolute.
I know how to do all the different bits separately, but I can't figure out how to chain-them up.
Here's what I've got so far:
dir|get-filehash -Algorithm sha1
Which gives me this:
Algorithm Hash Path
--------- ---- ----
SHA1 DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 C:\temp\test\empty.txt
SHA1 88A5B867C3D110207786E66523CD1E4A484DA697 C:\temp\test\hello.txt
Now I only want the hash and filename , so I can do this:
dir|get-filehash -Algorithm sha1|select-object hash, path
Which gives me:
Hash Path
---- ----
DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 C:\temp\test\empty.txt
88A5B867C3D110207786E66523CD1E4A484DA697 C:\temp\test\hello.txt
So I can output this to an HTML file like this:
(dir|get-filehash -Algorithm sha1|select-object hash, path)|ConvertTo-html|add-content output.htm
[ignore the fact that this only works properly if the output file doesn't exist for now].
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/></colgroup>
<tr><th>Hash</th><th>Path</th></tr>
<tr><td>DA39A3EE5E6B4B0D3255BFEF95601890AFD80709</td><td>C:\temp\test\empty.txt</td></tr>
<tr><td>88A5B867C3D110207786E66523CD1E4A484DA697</td><td>C:\temp\test\hello.txt</td></tr>
</table>
So this gives me a HTML table; but the PATH values are absolute.
I know a simple way of getting a relative path using the 'Resolve-Path' cmdlet:
dir | Resolve-Path -Relative
.\empty.txt
.\hello.txt
But I can't get it to 'fit' in the rest of my script ; I guess their might be a .NET function to do this in a different way ? Or is there some fancy ninja-use of brackets that let me squeeze this call to a cmdlet insde of the 'select-object' list ?
I tried this: but it doesn't work:
# NOTE: this code does not work !
PS > dir|get-filehash|select-object hash, (path|Resolve-Path -relative)
Made some progress on this - but the solution still isn't very satisfactory - since I also need control over the headers (rather than just 'name', 'value' which the HashTable provides).
I can get these headers working in a 'format-table',but still not in 'convertto-html'.
Here's the code so far:
function get-relative($infile) {
begin { $return_hash=#{} }
process {
$relative_path=($_|resolve-path -Relative)
$filehash=($_| Get-FileHash -Algorithm sha1).hash
$return_hash.add($relative_path, $filehash)
}
end { return $return_hash }
}
And to call it with a formatter:
$table_format = #{Expression={$_.Name} ; Label="Filename"}, #{Expression={$_.Value} ; Label="CHECKSUM(SHA1)"}
dir|get-relative|format-table $table_format
This gives:
Filename CHECKSUM(SHA1)
-------- --------------
.\goodbye.txt DA39A3EE5E6B4B0D3255BFEF95601890AFD80709
.\hello.txt 88A5B867C3D110207786E66523CD1E4A484DA697
But if I shove that through a 'convertto-html', weirdness ensues. (I guess this is because the output from 'format-table' is just a string by now....)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/><col/><col/><col/><col/></colgroup>
<tr><th>ClassId2e4f51ef21dd47e99d3c952918aff9cd</th><th>pageHeaderEntry</th><th>pageFooterEntry</th><th>autosizeInfo</th><th>shapeInfo</th><th>
groupingEntry</th></tr>
<tr><td>033ecb2bc07a4d43b5ef94ed5a35d280</td><td></td><td></td><td></td><td>Microsoft.PowerShell.Commands.Internal.Format.TableHeaderInfo</td><
td></td></tr>
<tr><td>9e210fe47d09416682b841769c78b8a3</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>27c87ef9bbda4f709f6b4002fa4af63c</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>27c87ef9bbda4f709f6b4002fa4af63c</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>4ec4f0187cb04f4cb6973460dfe252df</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>cf522b78d86c486691226b40aa69e95c</td><td></td><td></td><td></td><td></td><td></td></tr>
</table>
</body></html>

PHP email attachment not going through

Not sure what I'm missing here, must be something small.. I removed the SMTP/IP/SERVER stuff from the top. I also don't know why SMTP is adding the boundary at the end with "--" at the end, that part I didn't include in body. Server is EC2 Amazon Linux.
Date: Fri, 13 Jul 2012 00:33:15 -0400
To: X#X.com
Subject: Customer Order #100002
X-PHP-Originating-Script: 222:functions.php
From: X#X.com
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="-----=ee483485be490cf4afcc323ac23e7a53"
Content-Type: application/octet-stream; name="ShippingLabel_100002.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ShippingLabel_100002.gif"
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
-----=ee483485be490cf4afcc323ac23e7a53
-------=ee483485be490cf4afcc323ac23e7a53--
Got it to work... I knew it was something small. Don't forget the boundaries include two extra --'s to split correctly.