1166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathpackage com.squareup.okhttp.guide;
2166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath
3166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport com.squareup.okhttp.OkHttpClient;
4166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.io.BufferedReader;
5166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.io.IOException;
6166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.io.InputStream;
7166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.io.InputStreamReader;
8166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.io.OutputStream;
9166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.net.HttpURLConnection;
10166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.net.URL;
11166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath
12166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathpublic class PostExample {
13166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  OkHttpClient client = new OkHttpClient();
14166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath
15166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  void run() throws IOException {
16166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    byte[] body = bowlingJson("Jesse", "Jake").getBytes("UTF-8");
17166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    String result = post(new URL("http://www.roundsapp.com/post"), body);
18166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    System.out.println(result);
19166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  }
20166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath
21166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  String post(URL url, byte[] body) throws IOException {
22166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    HttpURLConnection connection = client.open(url);
23166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    OutputStream out = null;
24166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    InputStream in = null;
25166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    try {
26166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      // Write the request.
27166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      connection.setRequestMethod("POST");
28166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      out = connection.getOutputStream();
29166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      out.write(body);
30166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      out.close();
31166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath
32166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      // Read the response.
33166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
34166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        throw new IOException("Unexpected HTTP response: "
35166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath            + connection.getResponseCode() + " " + connection.getResponseMessage());
36166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      }
37166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      in = connection.getInputStream();
38166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      return readFirstLine(in);
39166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    } finally {
40166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      // Clean up.
41166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      if (out != null) out.close();
42166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath      if (in != null) in.close();
43166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    }
44166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  }
45166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath
46166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  String readFirstLine(InputStream in) throws IOException {
47166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
48166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    return reader.readLine();
49166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  }
50166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath
51166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  String bowlingJson(String player1, String player2) {
52166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    return "{'winCondition':'HIGH_SCORE',"
53166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        + "'name':'Bowling',"
54166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        + "'round':4,"
55166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        + "'lastSaved':1367702411696,"
56166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        + "'dateStarted':1367702378785,"
57166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        + "'players':["
58166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        + "{'name':'" + player1 + "','history':[10,8,6,7,8],'color':-13388315,'total':39},"
59166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        + "{'name':'" + player2 + "','history':[6,10,5,10,10],'color':-48060,'total':41}"
60166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath        + "]}";
61166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  }
62166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath
63166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  public static void main(String[] args) throws IOException {
64166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath    new PostExample().run();
65166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  }
66166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath}
67