Ответ 1
Дальнейшее обновление, октябрь 2013 г.
Хотя в то время, когда я написал этот ответ, ASIHTTPRequest поддерживался широко поддерживаемым, это уже не так. Это не рекомендуется для новых проектов - вместо этого напрямую используйте NSURLConnection или используйте AFNetworking.
С AFNetworking существует метод [httpClient setAuthorizationHeaderWithUsername:username password:password];
для проверки подлинности HTTP и создание формы стиля POST одинаково легко - см. AFNetworking Post Request для этого.
Оригинальный ответ:
Многие люди используют класс ASIHTTPRequest для работы с http и https на iPhone/iPad, поскольку у него много полезных функций, которые сложно или трудоемко выполнять со встроенными классами:
http://allseeing-i.com/ASIHTTPRequest/
Начиная с самого простого уровня, вы должны начать с чего-то вроде:
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
NSString *response = [request responseString];
NSLog(@"response = %@", response);
}
Если вы используете HTTP-аутентификацию, ASIHTTPRequest автоматически предложит пользователю ввести имя пользователя и пароль.
ЕСЛИ вы используете какую-либо другую аутентификацию, вам, вероятно, потребуется запросить имя пользователя и пароль от пользователя самостоятельно и представить их как значение POST или пользовательский заголовок HTTP, а затем ответ может включать либо токен в ответ JSON или XML, или он может установить cookie.
Если вы добавите более подробную информацию о том, как работает схема аутентификации, я могу быть более конкретным.
Обновление
На основе обновления для эмуляции формы POST вам просто нужно добавить строки, например:
[request addPostValue:usernameString forKey:@"username"];
[request addPostValue:passwordString forKey:@"password"];
Вам также необходимо изменить способ создания запроса, а не:
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
делать:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
(Я также забыл упомянуть об этом выше, там код, который я поставил ранее, использует синхронный запрос, поэтому вы хотите заменить его асинхронным, чтобы избежать блокировки пользовательского интерфейса, как только вы доказали, что он работает.)
Здесь есть инфраструктура JSON для iphone:
http://code.google.com/p/json-framework/
который хорошо работает для меня и прост в использовании с ASIHTTPRequest.