63

When sending the GET request to the server, which uses self-signed certificate:

add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$RESPONSE=Invoke-WebRequest -Uri https://yadayada:8080/bla -Method GET
echo $RESPONSE

I'm getting following Response:

StatusCode        : 200
StatusDescription : OK
Content           : {123, 10, 108, 111...}
RawContent        : HTTP/1.1 200 OK
                    Content-Length: 21
                    Date: Sat, 11 Jun 2016 10:11:03 GMT

                    {
                        flag:false
                    }
Headers           : {[Content-Length, 21], [Date, Sat, 11 Jun 2016 10:11:03 GMT]}
RawContentLength  : 21

Content contains some wired numbers, so I went after RawContent, how would I parse the JSON inside, ignoring headers? or is there a clean way to get Content from those numbers?

2
  • 3
    Do yiou need the JSON at all or just the values? You could replace Invoke-WebRequest with Invoke-RestMethod which auto-converts json response to a psobject so you can use $response = Intoke-RestMethod -Uri "https://yadayada:8080/bla"; $response.flag Commented Jun 11, 2016 at 11:32
  • 2
    Thanks Frode F., this solves my puzzle. For me JSON values are good enough, if you would repost this as answer I'll accept it Commented Jun 11, 2016 at 11:44

3 Answers 3

126

You could replace Invoke-WebRequest with Invoke-RestMethod which auto-converts json response to a psobject so you can use:

$response = Invoke-RestMethod -Uri "https://yadayada:8080/bla"
$response.flag 
Sign up to request clarification or add additional context in comments.

Comments

29

If you have a need to use Invoke-WebRequest over Invoke-RestMethod you can convert it to an object by turning it into a string first

$response = Invoke-WebRequest -Uri "https://yadayada:8080/bla"
$jsonObj = ConvertFrom-Json $([String]::new($response.Content))

2 Comments

Heads up in case it helps anyone else - the syntax on line 2 in this answer doesn't work for Powershell v4 - but Invoke-RestMethod did work. Invoke-RestMethod also has a benefit (in Powershell v4 at least) to not have a dependency on IE - to get Invoke-WebRequest to work on an environment without IE available, I had to provide -UseBasicParsing.
Just want to mention, I have not tested the line 2 syntax (for powershell 4), but I did test the answer from below, and ConvertFrom-Json $response.Content
10

This way:

$response = Invoke-WebRequest -Uri <your_uri>
if ($response.statuscode -eq '200') {
    $keyValue= ConvertFrom-Json $response.Content | Select-Object -expand "<your_key_name>"
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.