Как сделать GET-запрос для REST API, который имеет тело запроса, используя Scala? - PullRequest
0 голосов
/ 11 октября 2019

Я новичок в программировании Scala и на самом деле тестирую производительность API с помощью Gatling. Дело в том, что мы не хотим хранить пароли в нашем коде, поэтому мы хотим вызвать REST API, который возвращает имя пользователя и пароль.

Catch здесь - это тип запроса GET, но он имееттело JSON для отправки. Ответ от API на самом деле зависит от тела JSON, которое мы отправляем в запросе

Например:

URL - https://www.somesecrets.com/ Тело JSON -

{ 
  "env":"qa",
  "key":"micro"
}

Может ли кто-нибудь помочь в написании кода Scala, который позволяет отправлять Body в GET-запросе

Этот код я уже пробовал


def get(url: String,
  connectTimeout: Int = 5000,
  readTimeout: Int = 5000,
  requestMethod: String = "GET") = {
  println("Getting Password from Secret Repo")
  import java.net. {
    URL,
    HttpURLConnection
  }
  val connection = (new URL(url)).openConnection.asInstanceOf[HttpURLConnection]
  connection.setConnectTimeout(connectTimeout)
  connection.setReadTimeout(readTimeout)
  connection.setRequestMethod(requestMethod)
  val inputStream = connection.getInputStream
  val content = scala.io.Source.fromInputStream(inputStream).mkString
  if (inputStream != null) inputStream.close
  content
}

Но я не понимаю, как его расширитькод для отправки JSON Body

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Вы не можете добавить тело запроса к GET-запросу. Ну, технически вы можете, но это ничего не значит. И многие клиенты HTTP не позволят вам. И Гатлинг, вероятно, не позволяет вам. Подробнее об этом см. Здесь .

Смысл запроса GET заключается в том, что вы запрашиваете у сервера данные для вас. Как только вы отправляете тело запроса, вы подразумеваете, что некоторые данные необходимо создать или изменить на сервере. Вот почему существует несколько методов запроса, и не все являются GET.

Если вы хотите отправлять данные в запросе GET, вам необходимо использовать параметры запроса, заголовки, файлы cookie, данные сеанса. ... и если вам нужно, чтобы это было скрыто, зашифруйте его.

Если вы застряли с необходимостью посылать тело для запроса GET, вам необходимо пересмотреть структуру вашего приложения ...


NB. Если я неправильно понял, и вы действительно хотите вернуть тело из запроса GET, дайте мне знать, и я удалю этот ответ, поскольку он больше не применяется.

0 голосов
/ 11 октября 2019

Вы не можете добавить тело к GET-запросу. GET-запросы включают все необходимые данные в URL-адресе, в то время как POST-запросы предоставляют дополнительные данные от клиента (браузера) на сервер в теле сообщения.

Вот пример того, как выполнить POST-запрос с помощью scala:

import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.DefaultHttpClient
import com.google.gson.Gson

object ExecutePostRequestApp extends App {

  val requestBody = s"""{ 
          "env":"qa",
          "key":"micro"
        }"""

  // create an HttpPost object
  val post = new HttpPost("https://www.somesecrets.com/")

  // set the Content-type
  post.setHeader("Content-type", "application/json")

  // add the JSON as a StringEntity
  post.setEntity(new StringEntity(requestBody))

  // send the post request
  val response = (new DefaultHttpClient).execute(post)
}
...