Skip to content

Commit

Permalink
Added API to haxe.Http for multiple response headers with same name. (#…
Browse files Browse the repository at this point in the history
…10812)

Fixed #9053.
  • Loading branch information
23rd authored Nov 8, 2022
1 parent 533449c commit dade20c
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions std/sys/Http.hx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ class Http extends haxe.http.HttpBase {
public var cnxTimeout:Float;
public var responseHeaders:Map<String, String>;

private var responseHeadersSameKey:Map<String, Array<String>>;

var chunk_size:Null<Int>;
var chunk_buf:haxe.io.Bytes;
var file:{
Expand Down Expand Up @@ -252,6 +254,23 @@ class Http extends haxe.http.HttpBase {
}
}

/**
Returns an array of values for a single response header or returns
null if no such header exists.
This method can be useful when you need to get a multiple headers with
the same name (e.g. `Set-Cookie`), that are unreachable via the
`responseHeaders` variable.
**/
public function getResponseHeaderValues(key:String):Null<Array<String>> {
var array = responseHeadersSameKey.get(key);
if (array == null) {
var singleValue = responseHeaders.get(key);
return (singleValue == null) ? null : [ singleValue ];
} else {
return array;
}
}

function writeBody(body:Null<BytesOutput>, fileInput:Null<Input>, fileSize:Int, boundary:Null<String>, sock:Socket) {
if (body != null) {
var bytes = body.getBytes();
Expand Down Expand Up @@ -366,6 +385,22 @@ class Http extends haxe.http.HttpBase {
var hname = a.shift();
var hval = if (a.length == 1) a[0] else a.join(": ");
hval = StringTools.ltrim(StringTools.rtrim(hval));

{
var previousValue = responseHeaders.get(hname);
if (previousValue != null) {
if (responseHeadersSameKey == null) {
responseHeadersSameKey = new haxe.ds.Map<String, Array<String>>();
}
var array = responseHeadersSameKey.get(hname);
if (array == null) {
array = new Array<String>();
array.push(previousValue);
responseHeadersSameKey.set(hname, array);
}
array.push(hval);
}
}
responseHeaders.set(hname, hval);
switch (hname.toLowerCase()) {
case "content-length":
Expand Down

0 comments on commit dade20c

Please sign in to comment.