【问题标题】:Post request to server for get data , occur error : The resource could not be loaded向服务器发送请求以获取数据,发生错误:无法加载资源
【发布时间】:2016-02-10 23:53:19
【问题描述】:

我使用下面的代码通过发布请求从服务器获取数据

NSString *serverUrl=@"http://192.168.1.105:2300/api/customer";
    NSString *post =[NSString stringWithFormat:@"action=%@",actionName];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:serverUrl]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];
    NSError *error = nil; NSURLResponse *response = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

但出现以下错误:

Error Domain=NSURLErrorDomain Code=-1022 "资源不能被 加载,因为应用程序传输安全策略需要使用 安全连接。” UserInfo={NSUnderlyingError=0x7f9be35f19a0

我发现几篇帖子说在 info.plist 中添加以下行,我添加了,但我再次收到错误

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>http://192.168.1.105:2300</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <true/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <true/>
                <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSRequiresCertificateTransparency</key>
                <true/>
            </dict>
        </dict>
    </dict>

为什么?

【问题讨论】:

  • your_domain_here,你换了吗?
  • 替换为:192.168.1.105:2300
  • 试试这个&lt;key&gt;NSAppTransportSecurity&lt;/key&gt; &lt;dict&gt; &lt;key&gt;NSAllowsArbitraryLoads&lt;/key&gt; &lt;true/&gt; &lt;/dict&gt;
  • @anhtu : 添加但又报错
  • 尝试只向NSAppTransportSecurity 添加一个名为NSAllowsArbitraryLoads 的布尔变量并将其设置为YES。 (虽然这是一种变通方法,并且您使用的方法是正确的方法)

标签: ios objective-c iphone xcode


【解决方案1】:

您可以忽略所有安全限制,例如:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

但这不是一个好的解决方案。

参考How do I load an HTTP URL with App Transport Security enabled in iOS 9?

【讨论】:

    【解决方案2】:

    有关 NSAppTransportSecurity 的更多信息,请参阅此链接上的文档https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

    1. 步骤:以您的项目信息为例(图像显示为 完成以下步骤后将显示绿色标记)。
    2. 步骤:添加新属性 NSAppTransportSecurity 和类型将 成为字典
    3. 步骤:添加键 NSAllowsArbitraryLoads 选择属性类型 布尔值并设置为 YES。而且您的代码将在没有任何内容的情况下运行 NSAppTransportSecurity 例外。

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 1970-01-01
      • 2016-07-03
      • 2014-09-26
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2017-08-21
      • 2014-10-25
      相关资源
      最近更新 更多