Ответ 1
Чтобы закрыть это. Похоже, что это исправлено в iOS4 SDK - сетевой стек на симуляторе будет использовать прокси-сервер Mac для любых HTTP-вызовов.
Я кодирую приложение iPhone, которое должно делать небольшие HTTP-запросы в Интернете. Внутри нашей корпоративной локальной сети весь HTTP-трафик должен проходить через Squid.
Симулятор явно способен использовать прокси-сервер, так как работает Mobile Safari. Но как мне получить/установить настройки прокси в коде?
Буква заголовков прокомментирована для симулятора. Например,
CFNetworkCopySystemProxySettings
В CFProxySupport.h недоступен для симулятора - только для устройства. Я пробовал hardcoding следующим образом:
CFReadStreamSetProperty(stream, kCFProxyHostNameKey, @"internal.proxy.servername");
CFReadStreamSetProperty(stream, kCFProxyPortNumberKey, [NSNumber numberWithInt:80]);
CFReadStreamSetProperty(stream, kCFProxyTypeKey, kCFProxyTypeHTTP);
Но радости.
Мысли?
Чтобы закрыть это. Похоже, что это исправлено в iOS4 SDK - сетевой стек на симуляторе будет использовать прокси-сервер Mac для любых HTTP-вызовов.
Вы можете попробовать:
"Системные настройки" → "Сеть" → Выберите сетевое устройство → "Дополнительно" → "Прокси"
Вы можете попробовать использовать Proxifier: http://www.proxifier.com/mac/ Это позволяет вам установить прокси-сервер для любой программы.
Не то, что вы просили, но он должен решить вашу проблему.
Похоже, что XCode 4.0 (4A304a) сломал это снова. Если я установил стек для прокси-соединений через HTTP через Burp, отлично работает с каждым приложением (Safari и т.д.), Но с симулятором.
Просто перезапустите iPhone-симулятор.
для этого я использую следующий трюк
перейти к настройке → Общие → Доступность → жирный текст, чтобы включить → Открыть сборщик и попросить перезагрузить его, чтобы он стал эффективным → нажмите продолжить → Симулятор iPhone теперь перезагрузится
всплывающее окно запрашивает имя пользователя и пароль для прокси-сервера...
Этот вопрос немного стар, но я подумал, что добавлю свои выводы для справки. В iOS 4.x SDK, по крайней мере, следующий код работает как на симуляторе, так и на iPhone.
CFDictionaryRef systemProxyDict = CFNetworkCopySystemProxySettings();
CFReadStreamSetProperty(m_resultRef, kCFStreamPropertyHTTPProxy, systemProxyDict);
Симулятор, вероятно, не может использовать прокси. Он использует стандартный сетевой стек, предоставляемый Mac OS X, и именно это использует прокси.
Если константы закомментированы во время использования имитатора, и вы пробовали жестко кодировать его без везения, то это, вероятно, одна из многих вещей, которые просто не совпадают между симулятором и устройством, а вы вам придется протестировать эту часть вашего приложения на устройстве.
Просто закройте и снова запустите симулятор после применения конфигурации.