From fce2fe0e09e536beccffddcb728fae9c311a9794 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 10 Dec 2021 17:23:36 +0800 Subject: [PATCH 1/8] . --- requests/src/requests/Requester.scala | 15 +++++++++++---- requests/test/src/requests/RequestTests.scala | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/requests/src/requests/Requester.scala b/requests/src/requests/Requester.scala index bff1098..ac89aaf 100644 --- a/requests/src/requests/Requester.scala +++ b/requests/src/requests/Requester.scala @@ -1,11 +1,11 @@ package requests +import requests.Requester.methodField + import java.io.{ByteArrayInputStream, ByteArrayOutputStream, OutputStream} import java.net.{HttpCookie, HttpURLConnection, InetSocketAddress} import java.util.zip.{GZIPInputStream, InflaterInputStream} - import javax.net.ssl._ - import collection.JavaConverters._ import scala.collection.mutable @@ -34,6 +34,8 @@ trait BaseSession{ lazy val options = Requester("OPTIONS", this) // unofficial lazy val patch = Requester("PATCH", this) + + def send(method: String) = Requester(method, this) } object BaseSession{ @@ -279,9 +281,13 @@ case class Requester(verb: String, throw new InvalidCertException(url, e) } + println("headerFields") + println(headerFields.seq.mkString("\n")) + println("-headerFields") val deGzip = autoDecompress && headerFields.get("content-encoding").toSeq.flatten.exists(_.contains("gzip")) + println("deGzip " + deGzip) val deDeflate = autoDecompress && headerFields.get("content-encoding").toSeq.flatten.exists(_.contains("deflate")) - + println("deDeflate " + deDeflate) def persistCookies() = { if (sess.persistCookies) { headerFields @@ -331,7 +337,8 @@ case class Requester(verb: String, else connection.getErrorStream def processWrappedStream[V](f: java.io.InputStream => V): V = { - if (stream != null) { + if (verb.toLowerCase == "head") f(new ByteArrayInputStream(Array())) + else if (stream != null) { try f( if (deGzip) new GZIPInputStream(stream) else if (deDeflate) new InflaterInputStream(stream) diff --git a/requests/test/src/requests/RequestTests.scala b/requests/test/src/requests/RequestTests.scala index a648689..3027ded 100644 --- a/requests/test/src/requests/RequestTests.scala +++ b/requests/test/src/requests/RequestTests.scala @@ -77,6 +77,17 @@ object RequestTests extends TestSuite{ assert(read(res1).obj("form") == Obj("foo" -> "baz", "hello" -> "world")) } } + test("send"){ + requests.send("get")("https://httpbin.org/get?hello=world&foo=baz") + + val res1 = requests.send("put")( + "https://httpbin.org/put", + data = Map("hello" -> "world", "foo" -> "baz"), + chunkedUpload = true + ).text + + assert(read(res1).obj("form") == Obj("foo" -> "baz", "hello" -> "world")) + } } test("multipart"){ for(chunkedUpload <- Seq(true, false)) { @@ -280,5 +291,13 @@ object RequestTests extends TestSuite{ ) assert(res.statusCode == 200) } + test("gzipError"){ + val response = requests.head("https://api.github.com/users/lihaoyi") + assert(response.statusCode == 200) + assert(response.statusMessage == "OK") + assert(response.data.array == Array[Byte]()) + assert(response.headers.keySet.contains("content-length")) + assert(response.headers.keySet.contains("content-type")) + } } } From 96c66795dc827d303c03c48f6458c233f062fb07 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 10 Dec 2021 17:24:43 +0800 Subject: [PATCH 2/8] . --- requests/src/requests/Requester.scala | 3 +++ 1 file changed, 3 insertions(+) diff --git a/requests/src/requests/Requester.scala b/requests/src/requests/Requester.scala index ac89aaf..68a5f1f 100644 --- a/requests/src/requests/Requester.scala +++ b/requests/src/requests/Requester.scala @@ -337,6 +337,9 @@ case class Requester(verb: String, else connection.getErrorStream def processWrappedStream[V](f: java.io.InputStream => V): V = { + // The HEAD method is identical to GET except that the server + // MUST NOT return a message-body in the response. + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html section 9.4 if (verb.toLowerCase == "head") f(new ByteArrayInputStream(Array())) else if (stream != null) { try f( From cd733ddf1a8c512583f19b4ce2c454ba1eef5bf7 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 10 Dec 2021 17:24:58 +0800 Subject: [PATCH 3/8] . --- requests/src/requests/Requester.scala | 5 ----- 1 file changed, 5 deletions(-) diff --git a/requests/src/requests/Requester.scala b/requests/src/requests/Requester.scala index 68a5f1f..afb1f43 100644 --- a/requests/src/requests/Requester.scala +++ b/requests/src/requests/Requester.scala @@ -281,13 +281,8 @@ case class Requester(verb: String, throw new InvalidCertException(url, e) } - println("headerFields") - println(headerFields.seq.mkString("\n")) - println("-headerFields") val deGzip = autoDecompress && headerFields.get("content-encoding").toSeq.flatten.exists(_.contains("gzip")) - println("deGzip " + deGzip) val deDeflate = autoDecompress && headerFields.get("content-encoding").toSeq.flatten.exists(_.contains("deflate")) - println("deDeflate " + deDeflate) def persistCookies() = { if (sess.persistCookies) { headerFields From 673ab044f3dcc29a17590c38634306df64b4168f Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 10 Dec 2021 17:30:49 +0800 Subject: [PATCH 4/8] . --- requests/test/src/requests/RequestTests.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requests/test/src/requests/RequestTests.scala b/requests/test/src/requests/RequestTests.scala index 3027ded..6d8ac4b 100644 --- a/requests/test/src/requests/RequestTests.scala +++ b/requests/test/src/requests/RequestTests.scala @@ -295,7 +295,7 @@ object RequestTests extends TestSuite{ val response = requests.head("https://api.github.com/users/lihaoyi") assert(response.statusCode == 200) assert(response.statusMessage == "OK") - assert(response.data.array == Array[Byte]()) + assert(response.data.array.isEmpty) assert(response.headers.keySet.contains("content-length")) assert(response.headers.keySet.contains("content-type")) } From 9794e6f3f8bbe0904c9c50002a734bbf1ca6646f Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 10 Dec 2021 17:52:27 +0800 Subject: [PATCH 5/8] . --- .../src-2/requests/Scala2RequestTests.scala | 21 +++++++++++++++++++ requests/test/src/requests/RequestTests.scala | 11 ---------- 2 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 requests/test/src-2/requests/Scala2RequestTests.scala diff --git a/requests/test/src-2/requests/Scala2RequestTests.scala b/requests/test/src-2/requests/Scala2RequestTests.scala new file mode 100644 index 0000000..d745f7c --- /dev/null +++ b/requests/test/src-2/requests/Scala2RequestTests.scala @@ -0,0 +1,21 @@ +package requests + +import utest._ +import ujson._ + +object Scala2RequestTests extends TestSuite{ + val tests = Tests{ + test("send"){ + requests.send("get")("https://httpbin.org/get?hello=world&foo=baz") + + // This doesn't compile right in Scala3 for some reason + val res1 = requests.send("put")( + "https://httpbin.org/put", + data = Map("hello" -> "world", "foo" -> "baz"), + chunkedUpload = true + ).text + + assert(read(res1).obj("form") == Obj("foo" -> "baz", "hello" -> "world")) + } + } +} diff --git a/requests/test/src/requests/RequestTests.scala b/requests/test/src/requests/RequestTests.scala index 6d8ac4b..4c84f9d 100644 --- a/requests/test/src/requests/RequestTests.scala +++ b/requests/test/src/requests/RequestTests.scala @@ -77,17 +77,6 @@ object RequestTests extends TestSuite{ assert(read(res1).obj("form") == Obj("foo" -> "baz", "hello" -> "world")) } } - test("send"){ - requests.send("get")("https://httpbin.org/get?hello=world&foo=baz") - - val res1 = requests.send("put")( - "https://httpbin.org/put", - data = Map("hello" -> "world", "foo" -> "baz"), - chunkedUpload = true - ).text - - assert(read(res1).obj("form") == Obj("foo" -> "baz", "hello" -> "world")) - } } test("multipart"){ for(chunkedUpload <- Seq(true, false)) { From f12ace765d1feba2c1a966bb81d5122a4ca80f69 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 10 Dec 2021 19:13:30 +0800 Subject: [PATCH 6/8] . --- requests/src/requests/Requester.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requests/src/requests/Requester.scala b/requests/src/requests/Requester.scala index afb1f43..bf0751b 100644 --- a/requests/src/requests/Requester.scala +++ b/requests/src/requests/Requester.scala @@ -335,7 +335,7 @@ case class Requester(verb: String, // The HEAD method is identical to GET except that the server // MUST NOT return a message-body in the response. // https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html section 9.4 - if (verb.toLowerCase == "head") f(new ByteArrayInputStream(Array())) + if (verb == "HEAD") f(new ByteArrayInputStream(Array())) else if (stream != null) { try f( if (deGzip) new GZIPInputStream(stream) From 9df953efb591d8246ce0231ed09a647cae4994ed Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 10 Dec 2021 20:20:20 +0800 Subject: [PATCH 7/8] Update Requester.scala --- requests/src/requests/Requester.scala | 2 -- 1 file changed, 2 deletions(-) diff --git a/requests/src/requests/Requester.scala b/requests/src/requests/Requester.scala index bf0751b..54f345a 100644 --- a/requests/src/requests/Requester.scala +++ b/requests/src/requests/Requester.scala @@ -1,7 +1,5 @@ package requests -import requests.Requester.methodField - import java.io.{ByteArrayInputStream, ByteArrayOutputStream, OutputStream} import java.net.{HttpCookie, HttpURLConnection, InetSocketAddress} import java.util.zip.{GZIPInputStream, InflaterInputStream} From 189bf36ff35f79266dd5fbe55239eca84e938e17 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 10 Dec 2021 20:23:36 +0800 Subject: [PATCH 8/8] Update RequestTests.scala --- requests/test/src/requests/RequestTests.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requests/test/src/requests/RequestTests.scala b/requests/test/src/requests/RequestTests.scala index 1aabf93..98b94b4 100644 --- a/requests/test/src/requests/RequestTests.scala +++ b/requests/test/src/requests/RequestTests.scala @@ -265,8 +265,8 @@ object RequestTests extends TestSuite{ assert(response.statusCode == 200) assert(response.statusMessage == "OK") assert(response.data.array.isEmpty) - assert(response.headers.keySet.contains("content-length")) - assert(response.headers.keySet.contains("content-type")) + assert(response.headers.keySet.map(_.toLowerCase).contains("content-length")) + assert(response.headers.keySet.map(_.toLowerCase).contains("content-type")) } } }