简单的objective-c GET请求

Jen*_*ott 25 get http objective-c

这里的大部分信息都是指废弃的ASIHTTPREQUEST项目,请原谅我再次提问.

实际上,我需要刷磁条并将轨道2数据发送到返回"已登记"或"未登记"的网络服务(取决于卡的状态......)

所以我的数据就像是

NSData *data = [notification object];
Run Code Online (Sandbox Code Playgroud)

然后我需要将其传递给url

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

然后只收到一个响应字符串......

我搜索了很多,似乎有一些相互矛盾的答案,是否应该只使用AFNetworking,RESTkit或本机NSURL/NSMutableURLRequest协议来完成.

Jas*_*orn 61

在Objective-C中执行HTTP请求的选项可能有点令人生畏.一个对我有用的解决方案是使用NSMutableURLRequest.一个例子(使用ARC,所以YMMV)是:

- (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]; 
}
Run Code Online (Sandbox Code Playgroud)

更新:

您的问题的标题和标记说POST,但您的示例网址将指示GET请求.在GET请求的情况下,上面的示例就足够了.对于POST,您可以按如下方式进行更改:

- (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 */ 
}
Run Code Online (Sandbox Code Playgroud)


Sol*_*dak 15

iOS 9更新:因此,[NSURLConnection sendSynchronousRequest]从iOS 9开始不推荐使用.以下是NSURLSession从iOS 9开始使用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];
Run Code Online (Sandbox Code Playgroud)

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];
Run Code Online (Sandbox Code Playgroud)