Using NSURLRequest to pass key-value pairs to PHP script with POST

后端 未结 6 2074
灰色年华
灰色年华 2021-01-31 20:51

I\'m fairly new to objective-c, and am looking to pass a number of key-value pairs to a PHP script using POST. I\'m using the following code but the data just doesn\'t seem to b

相关标签:
6条回答
  • 2021-01-31 21:02

    If you are going to do a lot of form posting, I'd recommend skipping NSURLRequest and using ASIHTTPRequest instead. IMHO, it's well documented and offers an straightforward way to interact with webservices.

    0 讨论(0)
  • 2021-01-31 21:03

    Thanks for the suggestions everyone. In the end i managed to solve the issue by using stuff given here.

    Code:

    NSString *myRequestString = @"sender=my%20sender&rcpt=my%20rcpt&message=hello";
    NSData *myRequestData = [ NSData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ];
    NSMutableURLRequest *request = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString: @"http://people.bath.ac.uk/trs22/insert.php" ] ]; 
    [ request setHTTPMethod: @"POST" ];
    [ request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    [ request setHTTPBody: myRequestData ];
    NSURLResponse *response;
    NSError *err;
    NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err];
    NSString *content = [NSString stringWithUTF8String:[returnData bytes]];
    NSLog(@"responseData: %@", content);
    
    0 讨论(0)
  • 2021-01-31 21:03

    This is wrong:

    [NSData dataWithBytes:[post UTF8String] length:[post length]]
    

    The length should be expressed in bytes not in count of UTF8 characters. Instead of this line you should use:

    NSData *data = [post dataUsingEncoding: NSUTF8StringEncoding]; 
    
    0 讨论(0)
  • 2021-01-31 21:14

    This line [request setHTTPBody:[NSData dataWithBytes:data length:[data count]]]; looks way wrong to me.

    I think you want: [request setAllHTTPHeaderFields:data];

    Secondly, you will find the Cocoa framework capitalizes the first letter of your field names before sending them (annoyingly). You might have to make some changes to cope with that.

    0 讨论(0)
  • 2021-01-31 21:22

    This is working on IOS 5.o for Form Posting and getting the Data:

    self.requestFor = serviceNameT;
    
    responseData = [[NSMutableData data] retain];
    
    SharedResponsedObject* sharedResponsedObject = [SharedResponsedObject returnSharedInstance];
    LoginInfo* loginInfo = (LoginInfo*)sharedResponsedObject.loginInfo;
    
    NSLog(@"DEVICE_TOKEN: %@, loginInfo.sessionId: %@, itemIdT: %@", DEVICE_TOKEN, loginInfo.sessionId, itemIdT);
    
    NSString* requestStr = [NSString stringWithFormat:@"Token=%@&SessionId=%@&ItemId=%@", DEVICE_TOKEN, loginInfo.sessionId, itemIdT];
    
    
    NSData *myRequestData = [ NSData dataWithBytes: [ requestStr UTF8String ] length: [ requestStr length ] ];
    
    NSMutableURLRequest *request = [[ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString:@"http://menca.com:1500/DownloadContent.aspx"]]; 
    
    [request setHTTPMethod: @"POST" ];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    [ request setHTTPBody: myRequestData ];
    
    
    NSURLResponse *response;
    NSError *err;
    NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err];
    NSString *content = [NSString stringWithUTF8String:[returnData bytes]];
    NSLog(@"ServerRequestResponse::responseData: %@", content);
    

    Thanks & Regards, Arun Dhwaj

    0 讨论(0)
  • 2021-01-31 21:23

    Edit: Has been fixed in OP.


    This may not be your sole problem (I don't know my way around objective-c), but here goes:

    mysql_query("INSERT INTO php_test (SENDER, RCPT, MESSAGE) 
    VALUES ($sender, $rcpt, $message)");
    

    You're not quote-enclosing your strings - MySQL is bound to have a hissy fit over that.

    mysql_query("INSERT INTO php_test (SENDER, RCPT, MESSAGE) 
    VALUES ('$sender', '$rcpt', '$message')");
    

    Beyond that, generally, even if your script is not reachable from the outside, you shouldn't trust user input and either use mysql_real_escape_string() to escape your values before you insert them into the SQL statement to prevent SQL injection, or use prepared statements (preferred) - otherwise single quotes in your legitimate data will break the SQL statement's syntax.

    Entirely ungraceful example for reference:

    mysql_query("INSERT INTO php_test (SENDER, RCPT, MESSAGE) 
    VALUES ('" . mysql_real_escape_string($sender) ."',"
    ." '" . mysql_real_escape_string($rcpt) ."',"
    ." '" . mysql_real_escape_string($message) ."')");
    
    0 讨论(0)
提交回复
热议问题