Linux上的URLSession给出了与iOS不同的结果

nik*_*ers 7 urlrequest server-side swift swift3

我有一个简单的类使用URLSession发送HTTP POST请求(到Neo4j服务器,但这没关系),以及测试它成功的集成测试.

通过Xcode,通过iOS模拟器,我可以运行这个测试一百万次 - 每次都成功.

但是,当我swift test在Ubuntu Linux上运行时(我使用IBM提供的docker镜像),我经常会遇到测试失败,说我收到了401响应.

通过容器中的cURL复制它根本不会失败,所以我不认为这是我的容器的问题.

我添加了一个数据包转储(我通过Charles Proxy检查),其中15个测试运行,7个测试运行(因此7个请求)失败.所有失败的请求都抱怨没有提供身份验证标头.从转储中,这是正确的,转储不包含那些失败的请求的身份验证标头.但为什么不呢?实际上,所有标头标志都是不同的:成功运行具有以下标头:

POST /db/data/cypher HTTP/1.1
Host: 192.168.0.18:7474
Accept-Encoding: deflate, gzip
Authorization: Basic bmVvNGo6c3RhY2swdmVyRmxvdw==
Content-Type: application/json; charset=utf-8
Accept: application/json; charset=utf-8
Connection: keep-alive
User-Agent: urlsessionTestPackageTests.xctest (unknown version) curl/7.35.0
Content-Length: 135
Run Code Online (Sandbox Code Playgroud)

而一个不成功的人有这些:

POST /db/data/cypher HTTP/1.1
Host: 192.168.0.18:7474
Accept: */*
Accept-Encoding: deflate, gzip
Connection: keep-alive
User-Agent: urlsessionTestPackageTests.xctest (unknown version) curl/7.35.0
Content-Length: 135
Run Code Online (Sandbox Code Playgroud)

所有200个结果都具有相同的标题,并且所有401结果具有相同的标题.你能在我的代码中看到任何应该保证这样随机请求的内容吗?