Objective-C HTTP POST请求

Objective-C HTTP POST请求

问题描述:

我正在使用使用HTTP的SMS网关。我使用教程和问题在*等创建了一个请求,但有什么问题。当我手动输入网址时,我可以毫无问题地使用网关,但是我无法通过编程来完成,因此我认为我的代码可能不正确。感谢任何帮助!Objective-C HTTP POST请求

NSString *post = [NSString stringWithFormat:@"user=%@&password=%@&api_id=%@&to=%@&text=%@",_username,_password,_apiID,[_numbers componentsJoinedByString:@","],_txtMsg.text]; 
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:@"http://api.mySmsGateWay.com/http/sendmsg"]]; 
[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:postData]; 
NSError *error = [[NSError alloc] init]; 
NSHTTPURLResponse *responseCode = nil; 

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

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

NSLog (@"%@", [[NSString alloc] initWithData:oResponseData encoding:NSUTF8StringEncoding]); 
+0

你检查请求头?为了确保您不必设置与身份验证相关的参数或应用程序/ json。 – arthurfonseca

+0

使用浏览器时,只需将(NSString post)中写入的参数添加到URL就足够了。 – cameloper

+2

试试NSData * postData = [post dataUsingEncoding:NSUTF8StringEncoding] ;.并关心网址编码http://*.com/questions/8088473/how-do-i-url-encode-a-string – larva

NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.mySmsGateWay.com/http/sendmsg"]]; 

NSString *userUpdate =[NSString stringWithFormat:@"user=%@&password=%@&api_id=%@&to=%@&text=%@",_username,_password,_apiID,[_numbers componentsJoinedByString:@","],_txtMsg.text, nil]; 

//create the Method "GET" or "POST" 
[urlRequest setHTTPMethod:@"POST"]; 

//Convert the String to Data 
NSData *data1 = [userUpdate dataUsingEncoding:NSUTF8StringEncoding]; 

//Apply the data to the body 
[urlRequest setHTTPBody:data1]; 

NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
    if(httpResponse.statusCode == 200) 
    { 
     NSError *parseError = nil; 
     NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError]; 
     NSLog(@"The response is - %@",responseDictionary); 
     NSInteger success = [[responseDictionary objectForKey:@"success"] integerValue]; 
     if(success == 1) 
     { 
      NSLog(@"Login SUCCESS"); 
     } 
     else 
     { 
      NSLog(@"Login FAILURE"); 
     } 
    } 
    else 
    { 
     NSLog(@"Error");  
    } 
}]; 
[dataTask resume]; 

NSError *error; 
NSString *urlString = @"http://api.mySmsGateWay.com/http/sendmsg"; 
NSURL *url = [NSURL URLWithString:urlString]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

NSString * parameterString = [NSString stringWithFormat:@"user=%@&password=%@&api_id=%@&to=%@&text=%@",_username,_password,_apiID,[_numbers componentsJoinedByString:@","],_txtMsg.text]; 


NSLog(@"%@",parameterString); 

[request setHTTPMethod:@"POST"]; 

[request setURL:url]; 

[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 


NSData *postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding]; 

[request setHTTPBody:postData]; 

NSData *finalDataToDisplay = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; 

NSMutableDictionary *abc = [NSJSONSerialization JSONObjectWithData: finalDataToDisplay 
                  options: NSJSONReadingMutableContainers 

                  error: &error]; 
NSLog(@"%@",abc);