Post data in Objective C using Json

前端 未结 4 1284
[愿得一人]
[愿得一人] 2020-11-27 15:07

I am trying to post data to a PHP web service.
I am familiar doing this in html using query $.post but I am very much stumped trying this in objective C. I tried several

相关标签:
4条回答
  • 2020-11-27 15:46

    I have run your code, and server side receive all message.

    POST / HTTP/1.1
    Host: linux-test
    User-Agent: demoTest/1.0 CFNetwork/548.1.4 Darwin/11.3.0
    Content-Length: 44
    Accept: application/json
    Content-Type: application/json
    Accept-Language: en
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    
    {"Email":"test@test.com","FirstName":"test"}
    

    And follow code, if jsonRequest has Non-ASCII characters, the [jsonRequest length] will be wrong.

    NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];
    

    You can use strlen instead.

    NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:strlen([jsonRequest UTF8String])];
    

    or

    [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];
    
    0 讨论(0)
  • 2020-11-27 15:53

    Try this one

    NSData *requestData = [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];
    
    0 讨论(0)
  • 2020-11-27 15:57
    NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@posts", SeverURL]];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setRequestMethod:@"POST"];
    [request addRequestHeader:@"content-type" value:@"application/json"];
    [request addRequestHeader:@"User-Agent" value:@"iOS"];
    
    request.allowCompressedResponse = NO;
    request.useCookiePersistence = NO;
    request.shouldCompressRequestBody = NO;
    request.delegate=self;
    NSString *json=[[self prepareData] JSONRepresentation];//SBJSON lib, convert a dict to json string
    [request appendPostData:[NSMutableData dataWithData:[json dataUsingEncoding:NSUTF8StringEncoding]]];
    
    [request startSynchronous];
    
    0 讨论(0)
  • 2020-11-27 16:01

    I think you would be better off using the NSJSONSerialization class like this:

    NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys:
                         email, @"Email",
                         fname, @"FirstName",
                         nil];
    NSError *error;
    NSData *postdata = [NSJSONSerialization dataWithJSONObject:tmp options:0 error:&error];
    [request setHTTPBody:postData];
    

    Using a dictionary and then converting it to JSON it's easier than creating it like a string.

    Good luck!

    [SWIFT 3.0] (update)

    let tmp = ["email": email,
               "FirstName": fname]
    let postData = try? JSONSerialization.data(withJSONObject: tmp, options: .prettyPrinted)
    request.httpBody = postData
    
    0 讨论(0)
提交回复
热议问题