2012-02-22 7 views
17

ここでの情報のほとんどは放棄されたASIHTTPREQUESTプロジェクトを指していますので、もう一度質問してください。シンプルなobjective-c GETリクエスト

効果的に、私は(...カードのステータスに応じて)、磁気ストリップをスワイプし、「登録」または「notenrolled」を返すWebサービスにトラック2つのデータを送信する必要が

だから私のデータ

NSData *data = [notification object]; 

そして私は

http://example.com/CardSwipe.cfc?method=isenrolled&track2=data

そしてちょうどRの順に、URLにこれを渡す必要があるとして、単純に来ます応答文字列を返す...

AFNetworking、RESTkit、またはネイティブのNSURL/NSMutableURLRequestプロトコルを使用してこれを達成する必要があるかどうかについて、いくつかの矛盾する回答があるようです。

答えて

51

Objective-CでHTTPリクエストを実行するためのオプションは、少し威力を持つことがあります。私にとってうまくいったソリューションの1つはNSMutableURLRequestです。

- (NSString *) getDataFrom:(NSString *)url{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setHTTPMethod:@"GET"]; 
    [request setURL:[NSURL URLWithString:url]]; 

    NSError *error = nil; 
    NSHTTPURLResponse *responseCode = nil; 

    NSData *oResponseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error]; 

    if([responseCode statusCode] != 200){ 
     NSLog(@"Error getting %@, HTTP status code %i", url, [responseCode statusCode]); 
     return nil; 
    } 

    return [[NSString alloc] initWithData:oResponseData encoding:NSUTF8StringEncoding]; 
} 

更新:

あなたの質問のタイトル、およびタグ付けはPOSTを言うが、あなたの例のURLは、GETリクエストを示すことになる(YMMVので、ARCを使用して)例があります。 GET要求の場合、上記の例で十分です。 iOSの9のための

- (NSString *) getDataFrom:(NSString *)url withBody:(NSData *)body{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:body]; 
    [request setValue:[NSString stringWithFormat:@"%d", [body length]] forHTTPHeaderField:@"Content-Length"]; 
    [request setURL:[NSURL URLWithString:url]]; 

    /* the same as above from here out */ 
} 
+0

クイックレスポンスに感謝します。私はちょうどこれがどんなデータをどのように正確に渡すかに関してちょっと混乱していますか?単にHTTPサービスに接続する機能のようですか? –

+1

POSTサンプルは '[setHTTPBody:body]'行を介してデータを渡し、HTTP本体に到着します。 GETの例ではURLのデータが渡されるため、URLのフォーマットを事前に行う必要があります。おそらく '[NSString stringWithFormat:@" http://example.com?param1=%@¶m2=%@ "、param1、param2]'。 –

+0

これは、ページソースと同じNSLOGに "​​が登録"を返しています。実際のページは登録されたまま出力されています。私は他のすべてを解析できるという意味での些細な違いだと思いますが、このコードは適切な出力ではなくページデータを返していますか? –

8

更新:次のようにPOSTの場合、あなたはそれを変更したい をので、[NSURLConnection sendSynchronousRequest]はiOSの9から始まる廃止されました。ここのiOS 9

から始まる NSURLSessionを使用してGET要求を行う方法です

GETリクエスト

// making a GET request to /init 
NSString *targetUrl = [NSString stringWithFormat:@"%@/init", baseUrl]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setHTTPMethod:@"GET"]; 
[request setURL:[NSURL URLWithString:targetUrl]]; 

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler: 
    ^(NSData * _Nullable data, 
    NSURLResponse * _Nullable response, 
    NSError * _Nullable error) { 

     NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     NSLog(@"Data received: %@", myString); 
}] resume]; 

POSTリクエスト

// making a POST request to /init 
NSString *targetUrl = [NSString stringWithFormat:@"%@/init", baseUrl]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

//Make an NSDictionary that would be converted to an NSData object sent over as JSON with the request body 
NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys: 
        @"basic_attribution", @"scenario_type", 
        nil]; 
NSError *error; 
NSData *postData = [NSJSONSerialization dataWithJSONObject:tmp options:0 error:&error]; 

[request setHTTPBody:postData]; 
[request setHTTPMethod:@"POST"]; 
[request setURL:[NSURL URLWithString:targetUrl]]; 

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler: 
    ^(NSData * _Nullable data, 
    NSURLResponse * _Nullable response, 
    NSError * _Nullable error) { 

     NSString *responseStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     NSLog(@"Data received: %@", responseStr); 
}] resume]; 
0
**Simply Call and get your JSON Data.** 

-(void)getJSONData 
{ 

NSURL *url = [NSURL URLWithString:@"http://itunes.apple.com/us/rss/topaudiobooks/limit=10/json"]; 

NSURLSession *session = [NSURLSession sharedSession]; 

NSURLSessionDataTask *data = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 

    NSError *erro = nil; 

    if (data!=nil) { 

     NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&erro ]; 

     if (json.count > 0) { 

      for(int i = 0; i<10 ; i++){ 

       [arr addObject:[[[json[@"feed"][@"entry"] objectAtIndex:i]valueForKeyPath:@"im:image"] objectAtIndex:0][@"label"]]; 
      } 

     } 
    } 
    dispatch_sync(dispatch_get_main_queue(),^{ 

     [table reloadData]; 
    }); 
}]; 

[data resume]; 
} 
関連する問題