我有a simple class使用URLSession发送HTTP POST请求(到Neo4j服务器,但这无关紧要),并an integration test测试它是否成功。
通过Xcode,通过iOS模拟器,我可以运行这个测试一百万次 - 每次都成功。
然而,当我在Ubuntu Linux上运行swift test
(我使用the docker image provided by IBM)时,我经常会遇到测试失败,说我得到了401响应。
Replicating that via cURL根本没有失败,所以我不认为这是我的容器的问题。
我添加了packet dump(我通过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
虽然不成功的人有这些:
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
所有200个结果都具有相同的标题,并且所有401个结果都具有相同的标题。您能否在my code中看到任何应该保证随机请求的内容?