http get request with body

tmnd91

i know you shouldn't send a HTTP GET Request with a body, but ceilometer web api forces me to do so. I'm developing a ceilometer scala client, so I need a scala/java way to make a get request with a body. So far I tried with beeClient (http://www.bigbeeconsultants.co.uk) and in plain Java using httpConnection but I get a 404 error. In curl I can achieve the result in this way:

curl -X GET -H "X-Auth-Token: ..long long token here.." 
-H "Content-Type: application/json" 
-d '{"q": [{"field": "resource", "op": "eq", "value": "gdfsf"}]}'
http://137.204.57.150:8777/v2/meters/

That's my scala code that uses java HttpURLConnection:

import java.io._
import java.net._
val token = "myToken"
val url = new URL("http://137.204.57.150:8777/v2/meters/")
val body = "{\"q\": [{\"field\": \"resource\", \"op\": \"eq\", \"value\": \"gdfsf\"}]}"
val bodyLenght = body.length.toString
val connection = url.openConnection().asInstanceOf[HttpURLConnection]
connection.setRequestMethod("GET")
connection.setRequestProperty("Content-Type", "application/json")
connection.setRequestProperty("Content-Length", bodyLength)
connection.setRequestProperty("Accept", "*/*")
connection.setRequestProperty("X-Auth-Token", token)
connection.setDoInput(true)
connection.setDoOutput(true)
//SEND REQUEST
val wr = new DataOutputStream(connection.getOutputStream)
wr.write(body.getBytes)
wr.flush
wr.close
if (connection.getResponseCode == 200) 
    println("ok")
else
    println("error")

What's the difference between my Java implementation and the curl command? I can't see any, I tried checking the header of curl calling it with the -v argument and that's what I get:

* Hostname was NOT found in DNS cache
*   Trying 137.204.57.150...
* Connected to 137.204.57.150 (137.204.57.150) port 8777 (#0)
> GET /v2/meters/ HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 137.204.57.150:8777
> Accept: */*
> X-Auth-Token: ...Token....
> Content-Type: application/json
> Content-Length: 60
> 
* upload completely sent off: 60 out of 60 bytes
* HTTP 1.0, assume close after body

And then I get the response.

Thank you in advance

Giovanni Delnevo

I resolved the problem using jetty-client implementation, that lets build http requests in anyway you want. Here's the code (it's not immutable but it's not that bad in scala):

val httpClient = new HttpClient()
httpClient.setConnectTimeout(connectTimeout)
httpClient.setFollowRedirects(false)
httpClient.setStopTimeout(readTimeout)
httpClient.start()
val resp = httpClient.newRequest(uri).
      method(HttpMethod.GET).
      header("X-Auth-Token",s).
      send()

Look that i'm using the blocking API but jetty provides also a Java NIO API.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Java

HTTP GET with request body

From Dev

HTTP GET with request body RETROFIT

From Dev

Http POST request get headers and body

From Dev

Send content body with HTTP GET Request in Java

From Dev

How to get only Message Body from a GET HTTP request?

From Dev

How to get the HTTP Request body content in a Spring Boot Filter?

From Dev

http4s - get request body as String or InputStream

From Dev

Mule http:inbound-endpoint get body of request

From Dev

How do I get HTTP Request body content in Laravel?

From Dev

How to get HTTP POST request body in Beanshell Preprocessor?

From Dev

get the http post request body before jackson invocation in spring

From Dev

Elasticsearch GET request with request body

From Dev

Request body is overwriting the HTTP method?

From Dev

Request body is overwriting the HTTP method?

From Dev

Get Response Code and Response Body ina a single request using Http-request

From Dev

How to get GET request body

From Dev

What is the http request and response body for this URL request?

From Dev

Passing parameters in BODY with GET request

From Dev

Get request body as string in Django

From Dev

Failing to get a POST request body

From Dev

Get the request.body in NodeJs

From Dev

GET request body parameters undefined

From Dev

Get request body from node.js's http.IncomingMessage

From Dev

How to get value of 'body' object from Slim_Http_Request Object

From Dev

GET call with request body - request body not accessible at controller

From Dev

Get HTTP Body of Form in JavaScript

From Dev

$http GET Receiving Empty Body

From Dev

Handle optional JSON field in HTTP request body

From Java

Is an entity body allowed for an HTTP DELETE request?

Related Related

HotTag

Archive