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

URLSession on Linux giving different result than on iOS

提问人:niklassaers 提问时间:1/12/2017 最后编辑:shallowThoughtniklassaers 更新时间:1/23/2017 访问量:749

问:

我有一个简单的类使用 URLSession 发出 HTTP POST 请求(到 Neo4j 服务器,但这并不重要),以及一个测试它是否成功的集成测试

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

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

通过容器中的 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

而一个不成功的有这些:

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 个结果都具有相同的标头。你能在我的代码中看到任何应该保证这种随机请求的东西吗?

Swift Swift3 服务器端 URL请求

评论

0赞 niklassaers 1/12/2017
似乎类似于 stackoverflow.com/questions/41229814/... - 容器 Swift 版本是 3.0.1
0赞 niklassaers 1/12/2017
我更新到 Swift 3.0.2,仍然出现同样的错误。所以我按照上面的建议调整了代码,在 5 个请求中只得到了 62 个错误。好多了,但它仍然失败了,我仍然不知道为什么。
0赞 niklassaers 1/23/2017
现在的官方 Docker 映像 16.04 仍然存在问题:github.com/swiftdocker/docker-swift

答: 暂无答案