Doing HTTP request in Scala

前端 未结 9 737
死守一世寂寞
死守一世寂寞 2020-12-12 14:31

I am trying to issue a simple POST request to a webservice which returns some XML in Scala.

It seems that Dispatch is the standard library used for this task, but I

相关标签:
9条回答
  • 2020-12-12 14:56

    Another option is Typesafe's play-ws, which is the Play Framework WS library broken out as a standalone lib:

    http://blog.devalias.net/post/89810672067/play-framework-seperated-ws-library

    I wouldn't necessarily offer this as the best option, but worth mentioning.

    0 讨论(0)
  • 2020-12-12 14:57

    Here is a class I was working on. It has both GET and POST requests. GET without parameters - POST with parameters I used it to communicate with StreamSets in order to start a pipeline or check a pipeline status.

    it only need the following dependency in the build.sbt file:

    libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.3.0"
    

    You can find the documentation here: https://github.com/scalaj/scalaj-http#post-raw-arraybyte-or-string-data-and-get-response-code

    
    import scala.collection.mutable.ArrayBuffer
    import scalaj.http.{Http, HttpResponse}
    
    object HttpRequestHandler {
    
      val userName: String = "admin"
      val password: String = "admin"
    
      def sendHttpGetRequest(request: String): String = {
    
        println(" Send Http Get Request (Start) ")
    
        try {
    
          val httpResponse: HttpResponse[String] = Http(request).auth(userName,password)
                                                                .asString
    
          val response = if (httpResponse.code == 200) httpResponse.body
          else{
            println("Bad HTTP response: code = "+httpResponse.code )
            return "ERROR"
          }
    
          println(" Send Http Get Request (End) ")
    
          return response
    
        } catch {
          case e: Exception => println("Error in sending Get request: "+e.getMessage)
            return "ERROR"
        }
    
    
      }
    
      def arrayBufferToJson(params:ArrayBuffer[(String,String)]): String ={
    
        var jsonString = "{"
        var count: Int = 0
        for(param <- params){
          jsonString+="\""+param._1+"\":\""+param._2+"\""+ ( if(count!=params.length-1) "," else "")
          count+=1
        }
        jsonString+="}"
    
        return jsonString
    
      }
    
      def sendHttpPostRequest(request: String,params: ArrayBuffer[(String,String)]): String = {
    
        println(" Send Http Post Request (Start) ")
    
        try {
          val postData : String = arrayBufferToJson(params)
          println("Parameters: "+postData)
          val httpResponse: HttpResponse[String] = Http(request).auth(userName,password)
                                                                .header("X-Requested-By","sdc")
                                                                .header("Content-Type", "application/json;charset=UTF-8")
                                                                .header("X-Stream" , "true")
                                                                .header("Accept", "application/json")
                                                                .postData(postData.getBytes)
                                                                .asString
    
    
          val response = if (httpResponse.code == 200) httpResponse.body
          else{
            println("Bad HTTP response: code = "+httpResponse.code )
            "ERROR"
          }
    
          println(" Send Http Post Request (End) ")
    
          return response
    
        } catch {
          case e: Exception => println("Error in sending Post request: " + e.getMessage)
            return "ERROR"
        }
      }
    
    }
    
    
    0 讨论(0)
  • 2020-12-12 15:00

    I use the following: https://github.com/scalaj/scalaj-http.

    Here's a simple GET request:

    import scalaj.http.{Http, HttpOptions}
    
    Http("http://example.com/search").param("q", "monkeys").asString
    

    and an example of a POST:

    val result = Http("http://example.com/url").postData("""{"id":"12","json":"data"}""")
      .header("Content-Type", "application/json")
      .header("Charset", "UTF-8")
      .option(HttpOptions.readTimeout(10000)).asString
    

    Scalaj HTTP is available through SBT:

    libraryDependencies += "org.scalaj" % "scalaj-http_2.11" % "2.3.0"
    
    0 讨论(0)
提交回复
热议问题