Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scala HTTPS post,包括JSON输入和输出以及身份验证_Python_Json_Scala - Fatal编程技术网

Python Scala HTTPS post,包括JSON输入和输出以及身份验证

Python Scala HTTPS post,包括JSON输入和输出以及身份验证,python,json,scala,Python,Json,Scala,我找不到一个Scala HTTPS post的示例,其中包括JSON输入和输出以及身份验证。我甚至在Java中找不到这样的例子。我可以在Python中轻松完成这项工作: def main(user_name, password): headers = {'Content-Type': 'application/json', 'Accept': 'application/json'} eta_data = """{ "contact": { "long

我找不到一个Scala HTTPS post的示例,其中包括JSON输入和输出以及身份验证。我甚至在Java中找不到这样的例子。我可以在Python中轻松完成这项工作:

def main(user_name, password):
    headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}

    eta_data = """{
      "contact": {
        "longitude": "-151.7200",
        "latitude": "-16.4400",
        "timestamp": "2016-04-22 15:14:55",
        "speedKnots": "15.4"
      },
      "destination": {
        "longitude": "-149.869722",
        "latitude": "-17.491667"
      }
    }"""

    r = requests.post('https://www4.demo.exactearth.com/eta', data=eta_data, auth=(user_name, password), headers=headers)
    print()
    print("eta:")
    print(r.text)
    print(r.json())

我不是要求任何人帮我把这个翻译成Scala,但这有多难呢?有人能给我指一本最新的Scala书籍吗?Scala HTTPS post、JSON输入和JSON输出以及简单用户名/密码身份验证可以在Akka HTTP文档中找到Scala中post、HTTPS、JSON输入/输出和基本身份验证的示例,例如:

在这里:


在我读了你的问题之后,我实际上试图解决这个问题。我发现大多数库都非常复杂,在它们的依赖项中使用Akka。 我用几个库编写了这种调用,并且比其他库更喜欢玩WS。初始化有点长(因为它也使用Akka),但实际使用情况良好且整洁

下面是我最后得到的代码。实际调用在
call
函数中

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import play.api.libs.ws._
import play.api.libs.ws.ahc._

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits._

object PlayWs extends App{

  val eta_data = """{
      "contact": {
        "longitude": "-151.7200",
        "latitude": "-16.4400",
        "timestamp": "2016-04-22 15:14:55",
        "speedKnots": "15.4"
      },
      "destination": {
        "longitude": "-149.869722",
        "latitude": "-17.491667"
      }
    }"""

  def call(wsClient: StandaloneWSClient): Future[Unit] = {

    wsClient.url("http://requestb.in/ozxfttoz")
      .withAuth("username", "password", WSAuthScheme.BASIC)
      .withHeaders("Content-Type" -> "application/json", "Accept" -> "application/json")
      .post(eta_data).map { response ⇒
        val statusText: String = response.statusText
        println("Response:")
        println(s"${response.status} $statusText")
        println(s"${response.body}")
      }
  }
  // Create Akka system for thread and streaming management
  implicit val system = ActorSystem()
  system.registerOnTermination {
    System.exit(0)
  }
  implicit val materializer = ActorMaterializer()

  val wsClient = StandaloneAhcWSClient()

  call(wsClient)
    .andThen { case _ => wsClient.close() }
    .andThen { case _ => system.terminate() }

}
我使用了独立版本,并将其作为

libraryDependencies += "com.typesafe.play" %% "play-ahc-ws-standalone" % "1.0.0-M6"

你看过ScalajHTTP吗?哇,真管用。我不知道为什么在任何地方都很难找到这样的例子。我从Scala开始,也发现很难找到像这样非常常见的任务的详细例子!我发现,通常情况下,您在应用程序中使用某些库或框架,并且在库/框架中有类似的常见任务,并且应该查看此库中有关使用HTTP的文档。我使用的不是WithHeader,而是WithTpHeaders。