Forum Discussion

ziyabikram96's avatar
ziyabikram96
Helper V
5 years ago
Solved

Not being able to access data via API Post Request

Hi,

I have been trying to import data using Trulinks Road Haulage Association, UK(RHA) APIs. Most of the API requests are POST while rest of them being GET. GET APIs have been straightforward while POST requests are posing problems. By Default, Web.Contents sends a GET request while a different approach is needed for POST.

 

How can I import data via POST request?

 

Thanks

  • Hi ziyabikram96 

    Including Content in your request makes the Web.Contents perform a POST, for example:

     

     

    Source = Json.Document(Web.Contents(url,[
    Headers = [#"Content-Type"="application/json"],
    Content = Text.ToBinary(body)
    ]
    ))

     

     

    I don't know exactly what you need to provide in the request (e.g. API Auth,Headers) as I don' t know the API,but this should get you started.  Post back if you need further assistance.

    regards

    Phil

6 Replies

  • Hi ziyabikram96 

    Including Content in your request makes the Web.Contents perform a POST, for example:

     

     

    Source = Json.Document(Web.Contents(url,[
    Headers = [#"Content-Type"="application/json"],
    Content = Text.ToBinary(body)
    ]
    ))

     

     

    I don't know exactly what you need to provide in the request (e.g. API Auth,Headers) as I don' t know the API,but this should get you started.  Post back if you need further assistance.

    regards

    Phil

    • davemays's avatar
      davemays
      New Member

      What if the API requires Windows Authentication? 
      Excel reports back that neither adding "contents" nor adding a method="POST" is allowed for anything but anonymous authentication. How do you post against an API behind Windows Authentication?

      If you were building a C# application, it can easily use Windows Authentication to negotiate with the server, and you don't have to manually add the credentials either. It seems that post requests to Windows autorized APIs  would be a very common use case in corporate environments, but I have not found a way to do so in Power Query.

    • MarcusR1's avatar
      MarcusR1
      Helper II

      Hi PhilipTreacy 

      I've got a similar issue, i can run all these in postman with no issues, but PQ causes no end of problems. this is what i have, but it throws errors DataSource.Error: Web.Contents failed to get contents from 'https://myapidomain.com/v0/auth/code' (500): Internal Server Error
      and
      Expression.Error: We cannot convert a value of type Binary to type Text. Details: Value=[Binary] Type=[Type]


      let
      apiBaseUrl = #"API URL",
      apiEmail = #"API Email",
      accessCode = #"Access Code",

      AuthUrl = apiBaseUrl & "/auth/code",

      RawBody = "{
      ""meta"": {},
      ""data"": {
      ""email"": """ & apiEmail & """,
      ""code"": """ & accessCode & """
      }
      }",

      Response = Web.Contents(
      AuthUrl,
      [
      Headers = [
      #"Content-Type" = "application/json",
      #"Accept" = "application/json",
      #"Accept-Language" = "en",
      #"User-Agent" = "PostmanRuntime/7.32.0" // mimic Postman
      ],
      Content = Text.ToBinary(RawBody, TextEncoding.Utf8)
      ]
      ),

      ResponseText = Text.FromBinary(Response, TextEncoding.Utf8),
      Parsed = Json.Document(ResponseText),
      AccessToken = Parsed[data][access_token]
      in
      AccessToken