lucasjosh / scalaj-http

Simple scala wrapper for HttpURLConnection. OAuth included.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status

Simple Http

This is a bare bones http client for scala which wraps HttpURLConnection

Usage

Simple Get

import scalaj.http.Http
  
Http("http://foo.com/search").param("q","monkeys").asString

Simple Post

Http.post("http://foo.com/add").params("name" -> "jon", "age" -> "29").asString

OAuth Dance and Request

import scalaj.http.{Http, Token}

val consumer = Token("key", "secret")
val token = Http("http://foursquare.com/oauth/request_token").param("oauth_callback","oob")
  .oauth(consumer).asToken

println("Go to http://foursquare.com/oauth/authorize?oauth_token=" + token.key)

val verifier = Console.readLine("Enter verifier: ").trim

val accessToken = Http("http://foursquare.com/oauth/access_token")
  .oauth(consumer, token, verifier).asToken

println(Http("http://api.foursquare.com/v1/history.json").oauth(consumer, accessToken).asString)

Parsing the response

Http("http://foo.com").{responseCode, asString, asXml, asBytes, asParams}

Installation

sbt

val scalaj_http = "org.scalaj" %% "scalaj-http" % "0.3.10"

maven

<dependency>
  <groupId>org.scalaj</groupId>
  <artifactId>scalaj-http_${scala.version}</artifactId>
  <version>0.3.10</version>
</dependency>  

Advanced Usage Examples

Parse the response InputStream using Lift Json

import java.io.InputStreamReader
import net.liftweb.json.JsonParser

Http("http://foo.com"){inputStream => 
  JsonParser.parse(new InputStreamReader(inputStream))
}

Post raw Array[Byte] or String data and get response code

Http.postData(url, data).header("content-type", "application/json").responseCode

Post multipart/form-data

Http.multipart(url, MultiPart("photo", "headshot.png", "image/png", fileBytes)).responseCode

You can also stream uploads and get a callback on progress:

Http.multipart(url, MultiPart("photo", "headshot.png", "image/png", inputStream, bytesInStream, 
  lenWritten => {
    println("Wrote %d bytes out of %d total for headshot.png".format(lenWritten, bytesInStream))
  })).responseCode

Send https request to site with self-signed or otherwise shady certificate

Http("https://localhost/").option(HttpOptions.allowUnsafeSSL).asString

Do a HEAD request

Http(url).option(HttpOptions.method("HEAD")).asString

Custom connect and read timeouts

These are set to 100 and 500 milliseconds respectively by default

Http(url).option(HttpOptions.connTimeout(1000)).option(HttpOptions.readTimeout(5000)).asString

Get responseCode, responseHeaders and parsedResponse

val (responseCode, headersMap, resultString) = Http(url).asHeadersAndParse(Http.readString)

Get request via a proxy

val response = Http(url).proxy(proxyHost, proxyPort).asString

Other custom options

The .option() method takes a function of type HttpURLConnection => Unit so you can manipulate the connection in whatever way you want before the request executes.

Change the Charset

By default, the charset for all param encoding and string response parsing is UTF-8. You can override with charset of your choice:

Http(url).charset("ISO-8859-1").asString

TODOS

  • Handle other http methods better (PUT,HEAD,DELETE)

About

Simple scala wrapper for HttpURLConnection. OAuth included.

License:Apache License 2.0


Languages

Language:Scala 68.4%Language:Java 30.2%Language:Shell 1.5%