iOS中如何执行HTTP POST请求?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我正在接触iOS开发,并希望我的第一个应用程序之一执行HTTP POST请求。

就我所能理解的,我应该通过一个NSURLConnection对象来管理处理请求的连接,这会强制我有一个委托对象,而委托对象又将处理数据事件。

有人可以用一个实际的例子来说明这个任务吗?

提问于
用户回答回答于

你可以使用NSURLConnection:

  1. 设置NSURLRequestrequestWithURL:(NSURL *)theURL用于初始化请求。
  2. 使用NSURLConnection以以下两种方式发送请求:
    • 同步: (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error I。
    • 异步: (void)start

不要忘记设置NSURLConnection的委托来处理连接:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [self.data setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
    [self.data appendData:d];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    [[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"")
                                 message:[error localizedDescription]
                                delegate:nil
                       cancelButtonTitle:NSLocalizedString(@"OK", @"") 
                       otherButtonTitles:nil] autorelease] show];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];

    // Do anything you want with it 

    [responseText release];
}

// Handle basic authentication challenge if needed
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    NSString *username = @"username";
    NSString *password = @"password";

    NSURLCredential *credential = [NSURLCredential credentialWithUser:username
                                                             password:password
                                                          persistence:NSURLCredentialPersistenceForSession];
    [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
用户回答回答于

ASIHTTPRequest已被开发者放弃。虽然仍然非常好,但你现在应该找找别的。

如果正在处理HTTPS,我建议使用ASIHTTPRequest库

扫码关注云+社区