1919
2020import org .openqa .selenium .remote .http .AddSeleniumUserAgent ;
2121import org .openqa .selenium .remote .http .ClientConfig ;
22+ import org .openqa .selenium .remote .http .Contents ;
23+ import org .openqa .selenium .remote .http .HttpMethod ;
2224import org .openqa .selenium .remote .http .HttpRequest ;
2325import org .openqa .selenium .remote .http .HttpResponse ;
2426
2527import java .io .InputStream ;
2628import java .net .URI ;
29+ import java .net .URL ;
2730import java .net .URLEncoder ;
2831import java .net .http .HttpRequest .BodyPublishers ;
2932import java .util .Objects ;
@@ -68,18 +71,24 @@ public java.net.http.HttpRequest createRequest(HttpRequest req) {
6871 break ;
6972
7073 case POST :
71- builder = builder .POST (BodyPublishers .ofInputStream (req .getContent ()));
72- break ;
74+ // Copy the content into a byte array to avoid reading the content inputstream multiple times.
75+ builder = builder .POST (BodyPublishers .ofByteArray (Contents .bytes (req .getContent ())));
76+ break ;
7377
7478 case PUT :
75- builder = builder .PUT (BodyPublishers .ofInputStream ( req .getContent ()));
79+ builder = builder .PUT (BodyPublishers .ofByteArray ( Contents . bytes ( req .getContent () )));
7680 break ;
7781
7882 default :
7983 throw new IllegalArgumentException (String .format ("Unsupported request method %s: %s" , req .getMethod (), req ));
8084 }
8185
8286 for (String name : req .getHeaderNames ()) {
87+ // Avoid explicitly setting content-length
88+ // This prevents the IllegalArgumentException that states 'restricted header name: "Content-Length"'
89+ if (name .equals ("Content-Length" )) {
90+ continue ;
91+ }
8392 for (String value : req .getHeaders (name )) {
8493 builder = builder .header (name , value );
8594 }
@@ -106,6 +115,11 @@ private String getRawUrl(URI baseUrl, String uri) {
106115 return rawUrl ;
107116 }
108117
118+ public URI getRawURI (HttpRequest req ) {
119+ String rawUrl = getRawUrl (config .baseUri (), req .getUri ());
120+ return URI .create (rawUrl );
121+ }
122+
109123 public HttpResponse createResponse (java .net .http .HttpResponse <InputStream > response ) {
110124 HttpResponse res = new HttpResponse ();
111125 res .setStatus (response .statusCode ());
0 commit comments