菜鸟教程小白 发表于 2022-12-12 09:26:43

ios - 使用 NSURL 发出 GET 请求不起作用


                                            <p><p>我正在尝试获取一个简单的 GET 请求来为我的 api 工作。但它似乎不起作用,我不知道为什么。</p>

<p>我的代码如下</p>

<h1>编辑,也尝试过 NSURLCredential 但这似乎也不起作用</h1>

<pre><code>- (void)viewDidLoad
{
    ;
    // Do any additional setup after loading the view.
    NSString *urlAsString = @&#34;https://www.test.com/api/v1/user/logout/&#34;;
    NSURL *url = ;
    NSMutableURLRequest *urlRequest = ; ;
    ;
    NSOperationQueue *queue = [ init];
    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response,NSData *data, NSError *error) {
      if ( &gt;0 &amp;&amp; error == nil){
            NSString *html = [ initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@&#34;HTML = %@&#34;, html); }
      else if ( == 0 &amp;&amp; error == nil){
            NSLog(@&#34;Nothing was downloaded.&#34;); }
      else if (error != nil){
            NSLog(@&#34;Error happened = %@&#34;, error); }
    }];

}

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
    return ;
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    forAuthenticationChallenge:challenge];

    ;
}
</code></pre>

<p>我的 API 输出 json。所以我应该得到一个 json 对象,上面写着</p>

<pre><code>success: False
reason: &#39;Already Logged out&#39;
</code></pre>

<p>但它却给了我以下错误</p>

<pre><code>2013-03-07 16:24:44.038 test Error happened = Error Domain=NSURLErrorDomain Code=-1012 &#34;The operation couldn’t be completed. (NSURLErrorDomain error -1012.)&#34; UserInfo=0x715db20 {NSErrorFailingURLKey=https://www.test.com/api/v1/user/logout/, NSErrorFailingURLStringKey=https://www.test.com/api/v1/user/logout/, NSUnderlyingError=0x7181cb0 &#34;The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)&#34;}
</code></pre>

<h1>方法二</h1>

<p>经过一番研究,我找到了另一种发送get请求的方法,这种方法似乎工作正常</p>

<pre><code>dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
      NSError *error = nil;
      NSURL *url = ;
      NSString *json = [NSString stringWithContentsOfURL:url
                                                encoding:NSASCIIStringEncoding
                                                   error:&amp;error];
      if(!error) {
            NSData *jsonData = ;
            NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData
                                                                     options:kNilOptions
                                                                     error:&amp;error];
            BOOL success = [ boolValue];
            if (!success) {
                NSString *reason = ;
                NSLog(@&#34;Cannot log out, as user %@&#34;, reason);
            }
            //NSLog(@&#34;JSON: %@&#34;, jsonDict);
      }else{
            NSLog(@&#34;\nJSON: %@ \n Error: %@&#34;, json, error);
      }
    });
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>问题的解决方案在于 API 本身。如果用户已经注销,API 应该发送 HTTPUnauthorized 信号。既然如此,iOS 就会显示所有这些异常。当我放弃它并只是发回一个简单的 json 响应时,一切都得到了修复。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 NSURL 发出 GET 请求不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15280479/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15280479/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 NSURL 发出 GET 请求不起作用