From fa717538ee52506cb84b94d2d27058e79772c454 Mon Sep 17 00:00:00 2001 From: Naftoli Gugenheim <98384+nafg@users.noreply.github.com> Date: Sun, 21 Jul 2024 22:52:54 -0400 Subject: [PATCH] Restore 0.8.0 behavior of header values overriding earlier ones for the same key (#163) Fixes #161 --- requests/src/requests/Requester.scala | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/requests/src/requests/Requester.scala b/requests/src/requests/Requester.scala index 7b4b158..e715dbe 100644 --- a/requests/src/requests/Requester.scala +++ b/requests/src/requests/Requester.scala @@ -10,6 +10,7 @@ import java.util.function.Supplier import java.util.zip.{GZIPInputStream, InflaterInputStream} import scala.collection.JavaConverters._ +import scala.collection.immutable.ListMap import scala.collection.mutable import scala.concurrent.{ExecutionException, Future} @@ -241,7 +242,12 @@ case class Requester(verb: String, .map { case (k, v) => s"""$k="$v"""" } .mkString("; ") )) - val allHeadersFlat = allHeaders.toList.flatMap { case (k, v) => Seq(k, v) } + val lastOfEachHeader = + allHeaders.foldLeft(ListMap.empty[String, (String, String)]) { + case (acc, (k, v)) => + acc.updated(k.toLowerCase, k -> v) + } + val headersKeyValueAlternating = lastOfEachHeader.values.toList.flatMap { case (k, v) => Seq(k, v) } val requestBodyInputStream = new PipedInputStream() val requestBodyOutputStream = new PipedOutputStream(requestBodyInputStream) @@ -255,7 +261,7 @@ case class Requester(verb: String, HttpRequest.newBuilder() .uri(url1.toURI) .timeout(Duration.ofMillis(readTimeout)) - .headers(allHeadersFlat: _*) + .headers(headersKeyValueAlternating: _*) .method(upperCaseVerb, (contentLengthHeader.headOption.map(_._2), compress) match { case (Some("0"), _) => HttpRequest.BodyPublishers.noBody()