json - 我使用Scalaj请求时出现SocketTimeoutException

标签 json scala httprequest spray

我正在尝试使用此库https://github.com/scalaj/scalaj-http发出一个简单的https请求。该请求包含一些json数据。

这是我在做什么:

  val jsonHeaders = """{"jsonrpc": "2.0", "method": "someMethod", "params": {"dataIds":["12348" , "456"]}, "data2": "777"}"""

  val result = Http.postData("https://someurl.com/json-rpc", jsonHeaders)
    .header("content-type", "application/json")
    .header("X-Application", "myCode")
    .header("X-Authentication", "myCode2")
    .option(HttpOptions.readTimeout(10000))
    .asString
    //.responseCode -- the same error

  println(result)


它总是返回超时错误:

[error] (run-main) java.net.SocketTimeoutException: connect timed out
java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
    at scalaj.http.Http$$anonfun$3.apply(Http.scala:263)
    at scalaj.http.Http$$anonfun$3.apply(Http.scala:261)
    at scalaj.http.Http$Request.process(Http.scala:102)
    at scalaj.http.Http$Request.apply(Http.scala:90)
    at scalaj.http.Http$Request.asString(Http.scala:133)
    at Application$delayedInit$body.apply(Application.scala:27)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
    at scala.App$class.main(App.scala:71)
    at Application$.main(Application.scala:8)
    at Application.main(Application.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
[trace] Stack trace suppressed: run last compile:run for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
    at scala.sys.package$.error(package.scala:27)


如果我只是做

val jsonHeaders = """{"version123": "12.0", "method": "someMethod", "params": {"dataIds": ["12348" , "456"]}, "data2": "777"}"""
val result = Http.postData("https://someurl.com/some-url2", jsonHeaders)
        .header("content-type", "application/json")
        .header("X-Application", "myCode")
        .header("X-Application1234", "myCode2")
        .option(HttpOptions.readTimeout(10000))
println(result)


它返回

Request(POST,<function2>,<function1>,List(),List((X-Authentication,myCode2), (X-Application1234,myCode), (content-type,application/json)),List(<function1>, <function1>, <function1>),DIRECT)


我做错了什么,还有其他简单的发送https请求的方法吗?即使涉及到spray框架,也没关系(不过,我没有在spray中找到如何执行此操作的任何示例)。

更新:

从这里取一个例子Doing HTTP request in Scala

最佳答案

您需要使用.option(HttpOptions.connTimeout(10000)).option(HttpOptions.readTimeout(50000))指定连接超时以及当前的读取超时。将10000更改为适合您的值。默认的连接超时是非常激进的100

您确实已经指定了读取超时,但是异常表明它是在建立连接而不是在读取响应时超时。

查看文档:https://github.com/scalaj/scalaj-http#custom-connect-and-read-timeouts

关于json - 我使用Scalaj请求时出现SocketTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17007127/

相关文章:

javascript - 如何将带有属性的jsobject转换为Xml

xml - 如何防止 Scala 的 XML PrettyPrinter 类删除换行符

javascript - Lift:如何将数据从 JavaScript 传回服务器

list - 从 scala 列表中获取头项和尾项

android - 连接超时

iphone - 如何在objective-c上登录服务器并获取页面源?

ruby-on-rails - 如何在混合(JSON API + HTML)Rails 5应用程序中使用JSON响应处理通用错误?

php - 如何在 PHP 中访问 JSON 解码数组

java - Gson解析集合

javascript - Appcelerator/Titanium - 输出整个 JSON 响应会损害应用程序性能吗?