1. ホーム
  2. iphone

[解決済み] iOS: HTTP POST リクエストを実行するには?

2022-07-21 03:56:04

質問

私はiOS開発に取り組んでおり、私の最初のアプリケーションの1つがHTTP POSTリクエストを実行するようにしたいと思います。

私が理解する限り、私はリクエストを処理する接続を NSURLConnection オブジェクトで管理する必要があり、そのためにデリゲートオブジェクトを持つ必要があります。

どなたか、実際の例でこのタスクを明確にしていただけませんか?

私は認証データ(ユーザー名とパスワード)を送信し、プレーンテキストの応答を得るためにhttpsのエンドポイントに連絡する必要があります。

どのように解決するのですか?

以下のようにNSURLConnectionを使用することができます。

  1. 設定する NSURLRequest : 使用する requestWithURL:(NSURL *)theURL を使ってリクエストを初期化します。

    POST リクエストおよび/または HTTP ヘッダを指定する必要がある場合は NSMutableURLRequest を使います。

    • (void)setHTTPMethod:(NSString *)method
    • (void)setHTTPBody:(NSData *)data
    • (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field
  2. リクエストを送信する方法は2つあります。 NSURLConnection :

    • 同期的に (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error

      これは NSData 変数を処理することができます。

      重要: UIをブロックしないように、別のスレッドで同期リクエストをキックオフすることを忘れないでください。

    • 非同期で (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];
}