Форум программистов, компьютерный форум CyberForum.ru

Swift

Войти
Регистрация
Восстановить пароль
 
 
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
#1

Http request - Swift

26.11.2015, 13:08. Просмотров 880. Ответов 25
Метки нет (Все метки)

Здравствуйте. Как получить ответ от сервера по url, без всяких асинхронных конструкций? Да, я знаю что нужно все подобные операции делать асинхронно, но мне нужно послать 10 запросов по очереди и если для каждого писать код в блоках получается очень длинная и не читаемая простыня. Поискал информацию - везде говорят, что можно только асинхронно, но как тогда поступают в ситуациях похожих на мою?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2015, 13:08     Http request
Посмотрите здесь:

Отправка HTTP (не HTTPS) запроса в Swift 2.0 с использованием NSURLSession - Swift
Доброго времени суток. Возникла проблема с отправкой POST запроса по http. Проблема в том, что несмотря на request.HTTPMethod =...

Выполнение http.request http.get - Node.js
О задаче: Начну с того что мне нужно сделать, мне нужно получить из формы url-адресс и выполнить http.request на этот адресс, после чего...

Http Request - PHP
Всем хай разбераюсь с одним google api, и к нему нету библиотеки пока никакой... В документации написанно надо посылать такого вида...

http request response - C++ Qt
имею код... void MainWindow::replyFinished(QNetworkReply *r){ QString str = r->readAll(); } void...

Http Server request - Delphi
Всем привет, подскажите как через IdHTTPServer сделать запросы, то есть чтобы при запросе в браузере к примеру 127.0.0.1/message у меня...

Http request librare - PHP
такая ситуация: есть 3 сайта на разных хостах. для того чтобы пользователь зарегистрировавшись на одном получал учетку и на 2 других...

обработка Http request в фоновом потоке - Java
Привет! Необходимо следующее: приходит http запрос на сервер, если его обработка длится больше N сек., то редиректим на страницу...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
26.11.2015, 17:59     Http request #2
Цитата Сообщение от Spelcrawler Посмотреть сообщение
но как тогда поступают в ситуациях похожих на мою?
Да хоть:
послатьЗапрос1()
послатьЗапрос2()
...
послатьЗапрос10()

Не очень понимаю в чем проблема.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
26.11.2015, 18:03  [ТС]     Http request #3
AncientPenguin, в том что для того, чтобы послать второй запрос мне нужен результат выполнения первого. А все ответы приходят в делегат. И чтобы мне послать по очереди 10 запросов нужно писать уже так:
запрос1(результат{
запрос2(результат{
запрос3...
})
})
И в каждом случае есть несколько вариантов дальнейшего поведения. Т.е. куча проверок на все что можно сбор разных параметров с разных запросов и использование этих параметров в дальнейших запросах. Как это все красиво написать с асинхронными запросами просто не представляю.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
26.11.2015, 19:21     Http request #4
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Как это все красиво написать с асинхронными запросами просто не представляю.
запрос1(...)
{
...
запрос2(результат1)
}


запрос2(...)
{
...
запрос3(результат2)
}

Как вариант.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
26.11.2015, 23:07  [ТС]     Http request #5
AncientPenguin, ну тут я буду по 2-3 раза каждый запрос выполнять, а когда мне нужны еще и ответы от первых 5 запросов, для совершения восьмого - вообще мрак.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
26.11.2015, 23:52     Http request #6
Цитата Сообщение от Spelcrawler Посмотреть сообщение
ну тут я буду по 2-3 раза каждый запрос выполнять


Я в смысле запросы обернуть в функции или вообще в переменные засунуть.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
27.11.2015, 13:58  [ТС]     Http request #7
Цитата Сообщение от AncientPenguin Посмотреть сообщение
или вообще в переменные засунуть.
Это как?
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
27.11.2015, 14:36     Http request #8
Заверните ваши запросы в NSOperation'ы
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
27.11.2015, 14:46  [ТС]     Http request #9
Цитата Сообщение от glvrzzz Посмотреть сообщение
Заверните ваши запросы в NSOperation'ы
Можно по подробнее? Насколько я понял это что-то на подобии AsyncTask из андроид. Если так - с этим проблем нет, распраллелить я смогу как нужно. Вопрос лишь в том как мне последовательно в одном потоке выполнить несколько http запросов.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
27.11.2015, 16:41     Http request #10
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Это как?
let delegate = {
(arg : type) -> returnType
in
...
}
или
var test: (Int, Int) -> Int = testFunc
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
27.11.2015, 16:54  [ТС]     Http request #11
AncientPenguin, ну тут разница не большая получается. Все равно будет непонятная простыня фиг пойми чего. В андроиде у меня реализовано примерно так: есть класс, в котором есть все методы из серверного api, все они возвращают ответ в обертке (собственно сам ответ, код ошибки, если есть, и пару методов для проверок). Далее я запускаю отдельный поток, в нем по очереди вызываю методы из api, проверяю каждый на ошибки, беру нужные мне данные и т.п.. Итоговый результат пишу в бд из того же потока и сообщаю всем подписавшимся что все выполнено (уже в главный поток), и там уже кому что нужно берут прямо из бд. Но в случае с асинхронными запросами такое сделать не получится.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
27.11.2015, 17:27     Http request #12
Spelcrawler, я не знаю как вам еще объяснить, скинете код покажу на примере.

О, придумал, вам надо сделать:

Цитата Сообщение от Spelcrawler Посмотреть сообщение
и сообщаю всем подписавшимся что все выполнено
Первый запрос должен сообщить второму, второй третьему и т.д., каждый запрос знает только про один следующий запрос.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
27.11.2015, 17:34  [ТС]     Http request #13
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Первый запрос должен сообщить второму, второй третьему и т.д., каждый запрос знает только про один следующий запрос.
Ну это совсем издевательство. Пока написал deprecated код на obj-c - с ним выходят нормальные синхронные запросы. Видимо apple опять за всех решили, как нужно писать код и на swift'e такого не добиться.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
27.11.2015, 18:11     Http request #14
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Ну это совсем издевательство.
Что это? Я вас пытался натолкнуть на мысль как по другому написать код, а не изменить функционал, но ваша фантазия работать не хочет, а виноват оказался эпл.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
27.11.2015, 19:02  [ТС]     Http request #15
AncientPenguin, не я все понимаю, но конструкция вида
результат1 = запрос1();
результат2 = запрос2(результат1);
намного легче читается чем то что вы предлагаете. Человеку первый раз увидевшему такой код вообще не понятно будет кто и что слушает и где это все описано. Ну и если уж зашла речь про фантазию, то тут как раз ограничение ее - "нам нравится делать так, и вы все делайте так же". Не очень хорошая политика при разработке языка.
Vorona
Peace 2 all shining faces
667 / 529 / 45
Регистрация: 05.03.2010
Сообщений: 1,273
29.11.2015, 12:44     Http request #16
Сообщение было отмечено автором темы, экспертом или модератором как ответ
есть такой паттерн как Promise или Future,
суть такая же как и с колбеками, только это грубо говоря колбеки, обернутые в объекты, над которыми можно проводить разные операции типа компановок и т.д
https://github.com/mxcl/PromiseKit

а есть еще интересней вещь, называется функциональное реактивное программирование (FRP)
грубо говоря, это промисы представленные во времени и с кучей богатейшего функционала
https://github.com/ReactiveCocoa/ReactiveCocoa
https://github.com/ReactiveX/RxSwift

Не хотел нагружать кучей всего, но, по моему мнению, это маст хев знания в современном мире разработки

Добавлено через 2 минуты
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Да хоть:
послатьЗапрос1()
послатьЗапрос2()
...
послатьЗапрос10()
Не очень понимаю в чем проблема.
проблема в адище, который называют callback hell
LeninRedStar
5 / 5 / 4
Регистрация: 22.11.2015
Сообщений: 21
29.11.2015, 13:15     Http request #17
а почему sendSynchroniusRequest у NSURLConnection не катит?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
03.12.2015, 10:25  [ТС]     Http request #18
Цитата Сообщение от LeninRedStar Посмотреть сообщение
а почему sendSynchroniusRequest у NSURLConnection не катит?
Что-то не вышло завести его на свифте под иос 9.1. Тот же самый код на obj-c работает, не знаю с чем связано, сильно не копал. Ну и насколько я понял через него не послать POST запрос.
LeninRedStar
5 / 5 / 4
Регистрация: 22.11.2015
Сообщений: 21
03.12.2015, 22:29     Http request #19
да, действительно этот метод задепрекейчен. Можно тогда действительно заюзать аналоги промисов, или например BFTask. Еще вариант правильно сказали обернуть в операцию, внутри операции заюзать какие нибудь dispatch группы или семафоры, чтобы сделать main метод синхронным. Потом эти операции нужно запускать на бекграундной очереди, им можно зависимости настраивать, в общем возможностей прилично.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2015, 00:22     Http request
Еще ссылки по теме:

Http POST request, wininet, winsock - C++ WinAPI
Значит так. Есть PHP скрипт, выводящий все параметры, переданные в запросе. <?php echo "hello!\r\n"; var_dump($_REQUEST); ...

The request failed with HTTP status 401: Unauthorized - PHP
Здраствуйте! При попытке вызвать веб сервис из php возникает ошибка "The request failed with HTTP status 401: Unauthorized", причем...

VK API, IdHTTP1, http/1.1 400 bad request - C++ Builder
Пытаюсь отправить файл во ВКонтакте //Получаем сервер для загрузки изображения String Publ = Edit2->Text; String Token =...

HTTP Error 400. The request hostname is invalid - nginx
Всем привет! Если запускать html файлы то все нормально, но если php то: Bad Request - Invalid Hostname HTTP Error 400. The...

Ошибка Маппинга: No mapping found for HTTP request with URI - Java EE
Добрый день, постоянно натыкаюсь на ошибку: No mapping found for HTTP request with URI in DispatcherServlet. В упор не могу понять,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
04.12.2015, 00:22     Http request #20
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class facepalm
{
    func fakerequest1()
    {
        var request1 = {
            () -> () in
            self.fakerequest2()
        }
    }
    
    func fakerequest2()
    {
        var request2 = {
            () -> () in
            self.fakerequest3()
        }
    }
    
    func fakerequest3()
    {
        var request3 = {
            () -> () in
            // ...
        }
    }
}
Тега swift не нашел.
Yandex
Объявления
04.12.2015, 00:22     Http request
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru