2016-09-04 2 views
0

Теперь я работаю над небольшим приложением, где мне нужно сделать подключения к некоторым веб-сайтам, чтобы получить некоторую информацию.NSURLSession.sharedSession() dataTaskWithRequest не работает

Вот функция, которую я сделал, которая удовлетворяет моим потребностям 90% времени.

func requestFunctionOn(url: String) { 
    print(#function + " url: \(url)") 
    let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
    request.HTTPMethod = "POST" 

    NSURLSession.sharedSession().dataTaskWithRequest(request, 
                completionHandler: { 
                 data, response, error in 

                 if error != nil { 
                  print("error=\(error)") 
                  return 
                 } 

                 print("RSC = \((response as! NSHTTPURLResponse).statusCode)") 
                 ............. doing some more useful work ............. 
                }).resume() 
} 

Есть моменты, когда я попал в проблему, не зная почему. В приведенном ниже примере следы в консоли отладчика рабочего случае (RSC = 200) и из неработающего случае (RSC = 404):

Работа, как и ожидалось:

requestFunctionOn url: http://abcnews.go.com 
RSC = 200 
(lldb) 

Не работает, как ожидалось:

requestFunctionOn url: http://www.bloomberg.com/asia 
RSC = 404 
(lldb) 

Что я могу сделать, чтобы сделать второй случай работы? Где мне нужно посмотреть?

+0

Вы пытаетесь опубликовать или получить? Попробуйте 'request.HTTPMethod =" GET "' –

+0

Я пытаюсь получить содержимое веб-сайта, чтобы разобрать его и прочитать, что мне нужно. Как я уже говорил, это в основном работает. В первом случае я могу это сделать. – Michel

+1

@ Leo Dabus: После вашей идеи, я только что сделал несколько тестов. Вот результат: При использовании: request.HTTPMethod = "POST"; У меня есть эффекты, упомянутые в моем посте. При использовании: request.HTTPMethod = "GET"; оно работает. При простом удалении строки он также работает. Я не совсем понимаю, что происходит. Может быть, вы можете объяснить? Спасибо за отзыв в любом случае. – Michel

ответ

0

две проблемы:

  • Вам необходимо установить Content-Type заголовка, чтобы указать содержимое тела запроса Почты, с эквивалентом Swift этого:

    [request addValue:@"text/plain" forHTTPHeaderField:@"Content-Type"]; 
    
  • Вам нужно установить тело запроса:

    request.HTTPBody = [NSData data]; 
    

Извинения за фрагменты Objective-C, но я полагаю, что это должно быть достаточно близко, чтобы вы могли найти эквивалентный код Swift. :-)

Смежные вопросы