iOS模拟器不向运行tomcat webservice的本地主机mac发送http请求
重要信息,我在一个测试用例下运行所有这些 我的URL是iOS模拟器不向运行tomcat webservice的本地主机mac发送http请求,ios,swift,swift3,Ios,Swift,Swift3,重要信息,我在一个测试用例下运行所有这些 我的URL是http://my-MacBook-Pro.local:8080/myapi/v2/Driver/getDriver?domain=123&driver=125&key=9808098 如果我将此URL粘贴到运行在同一台iPhone模拟器上的Safari上。它用JSON响应。我注意到我的catalina.out报告了这个请求 我已经在Settings->Developer上启用了允许HTTP服务 这是代码片段 print("fullurl -
http://my-MacBook-Pro.local:8080/myapi/v2/Driver/getDriver?domain=123&driver=125&key=9808098
如果我将此URL粘贴到运行在同一台iPhone模拟器上的Safari上。它用JSON响应。我注意到我的catalina.out报告了这个请求
我已经在Settings->Developer
上启用了允许HTTP服务
这是代码片段
print("fullurl ->"+urlComponents.url!.absoluteString)
URLSession.shared.dataTask(with: urlComponents.url!, completionHandler: {
(data, response, error) in
if(error != nil){
print("error")
}else{
do{
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]
print (json)
}catch let error as NSError{
print(error)
}
}
}).resume()
编辑
在info.plist
中添加了以下内容,但我的http请求仍然没有通过我的localhost
mac在端口8080上运行tomcat
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>My-MacBook-Pro.local</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
我猜我的代码有问题。您需要在info.plist文件中设置适当的标志,就像请求跟踪用户位置或访问照片库和相机一样。默认情况下,苹果会阻止对不安全web调用(即http)的请求
您可以查看如何设置单个异常,或者将nsallowsrabirtualloads
设置为true以允许所有不安全的调用。当然,这被认为是更简单但不太安全的选项。将其放在AppDelegate中:
setenv("CFNETWORK_DIAGNOSTICS", "3", 1);
就像这里描述的那样
这应该像“网络日志文件在file:x中”一样注销,您可以将该文件grep为您的URL,并检查是否有任何记录的错误没有显示在您的应用程序中。这是调试ATS或其他网络连接问题的一种非常好的方法,因为它非常冗长。在测试用例下运行网络调用需要xctestexpection
的框架
测试用例不等待调用async
completionHandlers
。不幸的是,xtestexpection
框架对设计不友好。我们应该能够在不改变类结构的情况下集成测试用例
让我们在控制台日志中跟踪对此的响应是否有错误?如果是,请将控制台日志中的无错误粘贴到此处。您的代码中有一堆print
语句。您可以共享这些语句的输出吗?尚未运行。我向info.plist添加了权限。您看到了吗?我明天再看。添加NSALLOWSArbitaryLoads
不起作用,我仍然看不到tomcat catalina。这个Xcode测试用例中的日志我想这就是我要找的。您的意思是,异步http响应将继续运行并登录到网络日志文件中进行脱机分析。伟大的我将这一行添加到AppDelegate,但我不知道在哪里可以找到网络日志文件。我所能看到的只是“测试会话日志”,我想我应该在CrashReporter文件夹中的Logs
下找到该文件。我找不到该文件夹。设置该文件夹时,它应该是首先登录到控制台的内容之一。我是作为测试用例而不是应用程序运行它的。现在,当我把它作为一个应用程序运行时,一切都开始工作了。请发布运行它的整个方法
setenv("CFNETWORK_DIAGNOSTICS", "3", 1);