11package org .codeoverflow .chatoverflow .connector .actor
22
33import akka .actor .Actor
4+ import org .apache .http .client .methods .HttpGet
5+ import org .apache .http .client .utils .URIBuilder
6+ import org .apache .http .impl .client .HttpClientBuilder
7+ import org .apache .http .util .EntityUtils
48
9+ /**
10+ * The HttpActor can be used to handle http requests.
11+ */
512class HttpActor extends Actor {
6- override def receive : Receive = ???
13+ private val client = HttpClientBuilder .create.build
14+
15+ /**
16+ * Send a GetRequest-Object to perform a http get request.
17+ *
18+ * @return the http request answer as some string or none
19+ */
20+ override def receive : Receive = {
21+ case GetRequest (uri, settings, queryParams) =>
22+ try {
23+ var httpGet = new HttpGet (uri)
24+ httpGet = settings(httpGet)
25+
26+ val urlBuilder = new URIBuilder (httpGet.getURI)
27+ queryParams.foreach(param => urlBuilder.addParameter(param._1, param._2))
28+ httpGet.setURI(urlBuilder.build())
29+
30+ val entity = client.execute(httpGet).getEntity
31+ if (entity != null ) {
32+ sender ! Some (EntityUtils .toString(entity, " UTF-8" ))
33+ } else {
34+ sender ! None
35+ }
36+ } catch {
37+ case _ : Exception => None
38+ }
39+ }
740}
41+
42+ /**
43+ * A get request consists of a URI at least. Http (e.g. header) settings and query parameters are optional.
44+ *
45+ * @param uri the web address incl. the protocol you want to request
46+ * @param settings a function manipulating the generated HttpGet-Element, e.g. by adding header-entries
47+ * @param queryParams the query params as sequence of key-value-tuple
48+ */
49+ case class GetRequest (uri : String ,
50+ settings : HttpGet => HttpGet = httpGet => httpGet,
51+ queryParams : Seq [(String , String )] = Seq [(String , String )]())
0 commit comments