Skip to main content
Changed question after figuring out that it's a linux specific problem
Source Link
Sean Lynch
  • 1.1k
  • 5
  • 16

Equivalent curl call Problem with URLReadURLRead[] and URLSubmit[] on Linux

Update

I originally thought there was something wrong with my usage of URLRead. But then I switched from my Mathematica instance on Ubuntu 17.10 to an instance on OS X 10.11 and it works fine on OS X.

So... Is this an issue with my installation? Or a bug in Mathematica on Linux?

In addition to the problem below, another (most likely related) issue is with URLSubmit.

URLSubmit["http://www.wolfram.com", 
  HandlerFunctions -> <|"TaskFinished" -> Print|>]

This gives the following error.

Failure["URLSubmitFailure", 
  Association[
    "MessageTemplate" :> MessageName[URLSubmit, "invak"],
    "MessageParameters" -> {
      Association["TaskFinished" -> Print]
    }
  ]
]

Original

I have a rest call that I'm using to talk to an Elasticsearch instance that looks like this with cURL.

curl -XGET "http://elastic00.example.com:9200/test-index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "_id": "AWDd8gqhdJ9xvhUtDICa"
    }
  }
}'

I can use this with no problems if I run it as an external call from Mathematica.

RunProcess[{"curl",
   "-XGET", "http://elastic00.example.com:9200/test-index/_search",
   "-H", "Content-Type: application/json",
   "-d", "{\"query\":{\"match\":{\"_id\":\"AWDd8gqhdJ9xvhUtDICa\"}}}" 
  }, "StandardOutput"]

But when I use HTTPRequest with URLRead it doesn't work.

req = HTTPRequest[
  URLBuild[<|
    "Scheme" -> "http",
    "Domain" -> "elastic00.example.com",
    "Port" -> 9200,
    "Path" -> {"test-index", "_search"}|>],
  <|
   "ContentType" -> "application/json",
   "Body" -> ExportString[{"query" -> {"match" -> {"_id" -> "AWDd8gqhdJ9xvhUtDICa"}}}, "JSON"]
   |>
  ]

URLRead[req]

I get an error saying that it is an InvalidLocation

Failure["InvalidLocation", 
  Association[
    "MessageTemplate" -> "Specified request is invalid", 
    "MessageParameters" -> Association[]]]

Equivalent curl call with URLRead

I have a rest call that I'm using to talk to an Elasticsearch instance that looks like this with cURL.

curl -XGET "http://elastic00.example.com:9200/test-index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "_id": "AWDd8gqhdJ9xvhUtDICa"
    }
  }
}'

I can use this with no problems if I run it as an external call from Mathematica.

RunProcess[{"curl",
   "-XGET", "http://elastic00.example.com:9200/test-index/_search",
   "-H", "Content-Type: application/json",
   "-d", "{\"query\":{\"match\":{\"_id\":\"AWDd8gqhdJ9xvhUtDICa\"}}}" 
  }, "StandardOutput"]

But when I use HTTPRequest with URLRead it doesn't work.

req = HTTPRequest[
  URLBuild[<|
    "Scheme" -> "http",
    "Domain" -> "elastic00.example.com",
    "Port" -> 9200,
    "Path" -> {"test-index", "_search"}|>],
  <|
   "ContentType" -> "application/json",
   "Body" -> ExportString[{"query" -> {"match" -> {"_id" -> "AWDd8gqhdJ9xvhUtDICa"}}}, "JSON"]
   |>
  ]

URLRead[req]

I get an error saying that it is an InvalidLocation

Failure["InvalidLocation", 
  Association[
    "MessageTemplate" -> "Specified request is invalid", 
    "MessageParameters" -> Association[]]]

Problem with URLRead[] and URLSubmit[] on Linux

Update

I originally thought there was something wrong with my usage of URLRead. But then I switched from my Mathematica instance on Ubuntu 17.10 to an instance on OS X 10.11 and it works fine on OS X.

So... Is this an issue with my installation? Or a bug in Mathematica on Linux?

In addition to the problem below, another (most likely related) issue is with URLSubmit.

URLSubmit["http://www.wolfram.com", 
  HandlerFunctions -> <|"TaskFinished" -> Print|>]

This gives the following error.

Failure["URLSubmitFailure", 
  Association[
    "MessageTemplate" :> MessageName[URLSubmit, "invak"],
    "MessageParameters" -> {
      Association["TaskFinished" -> Print]
    }
  ]
]

Original

I have a rest call that I'm using to talk to an Elasticsearch instance that looks like this with cURL.

curl -XGET "http://elastic00.example.com:9200/test-index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "_id": "AWDd8gqhdJ9xvhUtDICa"
    }
  }
}'

I can use this with no problems if I run it as an external call from Mathematica.

RunProcess[{"curl",
   "-XGET", "http://elastic00.example.com:9200/test-index/_search",
   "-H", "Content-Type: application/json",
   "-d", "{\"query\":{\"match\":{\"_id\":\"AWDd8gqhdJ9xvhUtDICa\"}}}" 
  }, "StandardOutput"]

But when I use HTTPRequest with URLRead it doesn't work.

req = HTTPRequest[
  URLBuild[<|
    "Scheme" -> "http",
    "Domain" -> "elastic00.example.com",
    "Port" -> 9200,
    "Path" -> {"test-index", "_search"}|>],
  <|
   "ContentType" -> "application/json",
   "Body" -> ExportString[{"query" -> {"match" -> {"_id" -> "AWDd8gqhdJ9xvhUtDICa"}}}, "JSON"]
   |>
  ]

URLRead[req]

I get an error saying that it is an InvalidLocation

Failure["InvalidLocation", 
  Association[
    "MessageTemplate" -> "Specified request is invalid", 
    "MessageParameters" -> Association[]]]
Source Link
Sean Lynch
  • 1.1k
  • 5
  • 16

Equivalent curl call with URLRead

I have a rest call that I'm using to talk to an Elasticsearch instance that looks like this with cURL.

curl -XGET "http://elastic00.example.com:9200/test-index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "_id": "AWDd8gqhdJ9xvhUtDICa"
    }
  }
}'

I can use this with no problems if I run it as an external call from Mathematica.

RunProcess[{"curl",
   "-XGET", "http://elastic00.example.com:9200/test-index/_search",
   "-H", "Content-Type: application/json",
   "-d", "{\"query\":{\"match\":{\"_id\":\"AWDd8gqhdJ9xvhUtDICa\"}}}" 
  }, "StandardOutput"]

But when I use HTTPRequest with URLRead it doesn't work.

req = HTTPRequest[
  URLBuild[<|
    "Scheme" -> "http",
    "Domain" -> "elastic00.example.com",
    "Port" -> 9200,
    "Path" -> {"test-index", "_search"}|>],
  <|
   "ContentType" -> "application/json",
   "Body" -> ExportString[{"query" -> {"match" -> {"_id" -> "AWDd8gqhdJ9xvhUtDICa"}}}, "JSON"]
   |>
  ]

URLRead[req]

I get an error saying that it is an InvalidLocation

Failure["InvalidLocation", 
  Association[
    "MessageTemplate" -> "Specified request is invalid", 
    "MessageParameters" -> Association[]]]