scala - errori - strumento controllo url



Come risolvere il Dropping Close poiché la connessione SSL sta già chiudendo l'errore in spray (1)

come hai detto,

Per assicurarmi che questo non fosse il problema del server dell'API, replica la stessa query utilizzando Node.js (Express e Request libs) e funziona sempre. Mi rende quasi sicuro un bug spray.

il tuo codice in scala invia richieste con la funzione HTTP pipelining, invii le richieste con la funzione HTTP pipelining mentre esegui il test con nodejs?

per messaggio di errore:

il server non sembra supportare il pipelining della richiesta

dovresti assicurarti:

  1. assicurati che il server supporti la funzione pipelining e che la funzione pipelining sia abilitata.
  2. se ci sono proxy tra client e server (includere proxy inverso), assicurarsi che i proxy supportino la funzione pipelining e che la funzione pipeline sia abilitata.

Se non è possibile assicurarsi che la funzione di pipelining possa essere supportata correttamente, non è necessario utilizzarla.

la seguente risorsa potrebbe essere utile:

Il pipelining HTTP richiede sia il client che il server per supportarlo. I server conformi a HTTP / 1.1 sono necessari per supportare il pipelining. Ciò non significa che i server debbano rispondere alle pipeline, ma che è necessario che non falliscano se un cliente sceglie di inviare richieste di pipeline. [7]

https://en.wikipedia.org/wiki/HTTP_pipelining

Il pipelining HTTP non è attivato di default nei browser moderni:

I proxy Buggy sono ancora comuni e portano a comportamenti strani e imprevedibili che gli sviluppatori Web non possono prevedere e diagnosticare facilmente. Il pipelining è complesso da implementare correttamente: la dimensione della risorsa che viene trasferita, l'RTT effettivo che verrà utilizzato, così come l'effettiva larghezza di banda, hanno un'incidenza diretta sul miglioramento fornito dal gasdotto. Senza saperlo, i messaggi importanti potrebbero essere rimandati dietro a quelli non importanti. La nozione di importante si evolve anche durante il layout della pagina! Il pipelining HTTP porta quindi a un miglioramento marginale solo nella maggior parte dei casi. Il pipelining è soggetto al problema HOL. Per questi motivi, il pipelining è stato sostituito da un algoritmo migliore, il multiplexing, che viene utilizzato da HTTP / 2.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x $ revision / 1330814

Sto effettuando una chiamata a un'API, ma la maggior parte delle volte continuo a ricevere un errore: " Eliminazione chiusura in quanto la connessione SSL è già in chiusura " e " Connessione prematura chiusa (il server non sembra supportare il pipelining della richiesta) . "Come il 90% delle volte che ottengo quell'errore, significa: in rare occasioni la query restituisce i dati che si suppone.

Per assicurarmi che questo non fosse il problema del server dell'API, replica la stessa query utilizzando Node.js (Express e Request libs) e funziona sempre. Mi rende quasi sicuro un bug spray .

Ecco un esempio del codice :

case class MyClass(user: String, pass: String)

class MyActor extends Actor {
  import spray.client.pipelining._
  import spray.http.BasicHttpCredentials
  import spray.http.{HttpRequest,HttpResponse}
  import scala.concurrent.Future

  import context.dispatcher

  def receive = {
    case myClass: MyClass => {
      val credentials: BasicHttpCredentials = BasicHttpCredentials(myClass.user, myClass.pass)
      val url: String = "https://myApi?params=values"
      val request: HttpRequest = Get(url) ~> addCredentials(credentials)
      val pipeline = sendReceive
      val response: Future[HttpResponse] = pipeline(request)
      val finalRes: Future[String] = response.map{ r =>
        println(r)
        r.entity.asString
      }
      finalRes pipeTo sender
    }
  } // end receive
} //end Actor

Dettaglio errore :

04/01 10:19:05 DEBUG[on-spray-can-akka.actor.default-dispatcher-8] a.i.TcpOutgoingConnection - Attempting connection to ...
04/01 10:19:05 DEBUG[on-spray-can-akka.actor.default-dispatcher-6] a.i.TcpOutgoingConnection - Connection established to ...
04/01 10:19:05 DEBUG[on-spray-can-akka.actor.default-dispatcher-6] s.c.c.HttpClientConnection - Connected to ...
04/01 10:19:05 DEBUG[on-spray-can-akka.actor.default-dispatcher-9] s.c.c.HttpHostConnectionSlot - Connection to ... established, dispatching 1 pending requests
04/01 10:19:05 DEBUG[on-spray-can-akka.actor.default-dispatcher-3] s.c.c.HttpClientConnection - now monitoring Actor[akka://on-spray-can/system/IO-TCP/selectors/$a/5]
04/01 10:19:05 DEBUG[on-spray-can-akka.actor.default-dispatcher-6] s.c.c.HttpHostConnectionSlot - Dispatching GET request to /api?params=values across connection Actor[akka://on-spray-can/user/IO-HTTP/group-0/4]
04/01 10:19:05 DEBUG[on-spray-can-akka.actor.default-dispatcher-6] s.c.c.HttpHostConnectionSlot - now monitoring Actor[akka://on-spray-can/user/IO-HTTP/group-0/4]
04/01 10:19:06 DEBUG[on-spray-can-akka.actor.default-dispatcher-3] s.c.c.HttpClientConnection - Dropping Close since the SSL connection is already closing
04/01 10:19:06 DEBUG[on-spray-can-akka.actor.default-dispatcher-3] s.c.c.HttpClientConnection - Connection was PeerClosed, awaiting TcpConnection termination...
04/01 10:19:06 DEBUG[on-spray-can-akka.actor.default-dispatcher-3] a.i.TcpOutgoingConnection - stopped
04/01 10:19:06 DEBUG[on-spray-can-akka.actor.default-dispatcher-3] s.c.c.HttpClientConnection - TcpConnection terminated, stopping
04/01 10:19:06 WARN [on-spray-can-akka.actor.default-dispatcher-3] s.c.c.HttpHostConnectionSlot - Premature connection close (the server doesn't appear to support request pipelining) in response to GET request to /myApi?params=values with 1 retries left, retrying...
04/01 10:19:06 DEBUG[on-spray-can-akka.actor.default-dispatcher-3] s.c.c.HttpClientConnection - stopped

E sono stato in grado di riprodurre l'errore in tutte queste versioni :

spray 1.0.1; akka 2.0.5; scala 2.9.3
spray 1.2.1; akka 2.2.4; scala 2.10.1
spray 1.3.1; akka 2.3.0; scala 2.10.3
spray 1.3.2; akka 2.3.6; scala 2.11.4
spray 1.3.3; akka 2.3.9; scala 2.11.6




spray-client