17
17
18
18
package org .openqa .selenium .remote .http .okhttp ;
19
19
20
- import static org .openqa .selenium .remote .http .Contents .bytes ;
21
- import static org .openqa .selenium .remote .http .Contents .empty ;
22
-
23
- import org .openqa .selenium .remote .http .Contents ;
24
- import org .openqa .selenium .remote .http .HttpRequest ;
25
- import org .openqa .selenium .remote .http .HttpResponse ;
26
-
20
+ import com .google .common .io .ByteStreams ;
27
21
import okhttp3 .HttpUrl ;
28
22
import okhttp3 .MediaType ;
29
23
import okhttp3 .Request ;
30
24
import okhttp3 .RequestBody ;
31
25
import okhttp3 .Response ;
26
+ import org .openqa .selenium .remote .http .Contents ;
27
+ import org .openqa .selenium .remote .http .HttpRequest ;
28
+ import org .openqa .selenium .remote .http .HttpResponse ;
32
29
33
30
import java .io .IOException ;
34
31
import java .io .InputStream ;
35
32
import java .io .UncheckedIOException ;
36
33
import java .net .URI ;
37
34
import java .util .Optional ;
38
35
36
+ import static org .openqa .selenium .remote .http .Contents .bytes ;
37
+ import static org .openqa .selenium .remote .http .Contents .empty ;
38
+
39
39
class OkMessages {
40
40
41
41
private OkMessages () {
42
42
// Utility classes.
43
43
}
44
44
45
- protected static Request toOkHttpRequest (URI baseUrl , HttpRequest request ) {
45
+ static Request toOkHttpRequest (URI baseUrl , HttpRequest request ) {
46
46
Request .Builder builder = new Request .Builder ();
47
47
48
48
HttpUrl .Builder url ;
@@ -88,7 +88,7 @@ protected static Request toOkHttpRequest(URI baseUrl, HttpRequest request) {
88
88
String rawType = Optional .ofNullable (request .getHeader ("Content-Type" ))
89
89
.orElse ("application/json; charset=utf-8" );
90
90
MediaType type = MediaType .parse (rawType );
91
- RequestBody body = RequestBody .create (type , bytes (request .getContent ()));
91
+ RequestBody body = RequestBody .create (bytes (request .getContent ()), type );
92
92
builder .post (body );
93
93
break ;
94
94
@@ -98,7 +98,7 @@ protected static Request toOkHttpRequest(URI baseUrl, HttpRequest request) {
98
98
return builder .build ();
99
99
}
100
100
101
- public static HttpResponse toSeleniumResponse (Response response ) {
101
+ static HttpResponse toSeleniumResponse (Response response ) {
102
102
HttpResponse toReturn = new HttpResponse ();
103
103
104
104
toReturn .setStatus (response .code ());
@@ -122,6 +122,17 @@ public void close() throws IOException {
122
122
response .headers ().names ().forEach (
123
123
name -> response .headers (name ).forEach (value -> toReturn .addHeader (name , value )));
124
124
125
+ // We need to close the okhttp body in order to avoid leaking connections,
126
+ // however if we do this then we can't read the contents any more. We're
127
+ // already memoising the result, so read everything to be safe.
128
+ try {
129
+ ByteStreams .copy (toReturn .getContent ().get (), ByteStreams .nullOutputStream ());
130
+ } catch (IOException e ) {
131
+ throw new UncheckedIOException (e );
132
+ } finally {
133
+ response .close ();
134
+ }
135
+
125
136
return toReturn ;
126
137
}
127
138
}
0 commit comments