当前位置: 动力学知识库 > 问答 > 编程问答 >

ios - How to post SOAP data to server in objective c

问题描述:

I am trying to post data to server but it give me error

code is

-(IBAction)loginBtnClk:(id)sender

{

[self sendDataToServer :@"POST"];

}

-(void) sendDataToServer : (NSString *) method{

int UserId=0;

NSString *UserCode = userTf.text;

int RoleId=12;

NSString *Salutation = @"Mr.";

NSString *FirstName=frstnmetf.text;

NSString *LastName =lstnametf.text;

NSString *Pwd=paswrdTf.text;

NSString *[email protected]"[email protected]";

NSString *[email protected]"9876543210";

NSString *[email protected]"4";

int EmpId=0;

int ZoneId=575;

NSString *post = [NSString stringWithFormat:@"UserId=%d&UserCode=%@&RoleId=%d&Salutation=%@&FirstName=%@&LastName=%@&Pwd=%@EmailId=%@&Mobile=%@&UserType=%@&EmpId=%d&ZoneId=%d",UserId,UserCode,RoleId,Salutation,FirstName,LastName,Pwd,EmailId,Mobile,UserType,EmpId,ZoneId];

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[post length]];

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

[request setURL:[NSURL URLWithString:@"http://URL?op=Insert_UserData"]];

[request setHTTPMethod:@"POST"];

[request setValue:postLength forHTTPHeaderField:@"Content-Length"];

NSLog(@"URL = %@",request);

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:postData];

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

NSLog(@"Connection link =%@",conn);

if(conn) {

mutableData =[[NSMutableData alloc] init];

NSLog(@"Connection Successful");

} else {

NSLog(@"Connection could not be made");

}

}

#pragma mark NSURLConnection delegates

-(void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *)response

{

[mutableData setLength:0];

}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

[mutableData appendData:data];

}

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

serverResponse.text = NO_CONNECTION;

return;

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

{

NSXMLParser *myNSXMLParserfloorObj=[[NSXMLParser alloc]initWithData:mutableData];

myNSXMLParserfloorObj.delegate=self;

[myNSXMLParserfloorObj parse];

NSLog(@"%@",myNSXMLParserfloorObj.parserError);

NSString *responseStringWithEncoded = [[NSString alloc] initWithData: mutableData encoding:NSUTF8StringEncoding];

//NSLog(@"Response from Server : %@", responseStringWithEncoded);

NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[responseStringWithEncoded dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];

serverResponse.attributedText = attrStr;

}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

{

if([elementName isEqualToString:@"Insert_UserData"])

{

myDataClassObj=[[mydata alloc]init];

}

}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

myMutableStringObj=[[NSMutableString alloc]initWithString:string];

NSLog(@"Array String: %@",myMutableStringObj);

NSData *data = [myMutableStringObj dataUsingEncoding:NSUTF8StringEncoding];

responsedict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

NSLog(@"JSON DATA = %@",responsedict);

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

{

}

when I am trying to post data it shows me error

2016-06-28 16:37:07.793 WebServiceDemo[5407:137315] Connection Successful

2016-06-28 16:37:13.035 WebServiceDemo[5407:137315] Array String: soap:Receiver

2016-06-28 16:37:13.035 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:15.241 WebServiceDemo[5407:137315] Array String: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---

2016-06-28 16:37:15.242 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:17.680 WebServiceDemo[5407:137315] Array String: >

2016-06-28 16:37:17.680 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:19.835 WebServiceDemo[5407:137315] Array String: System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.

2016-06-28 16:37:19.835 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:21.555 WebServiceDemo[5407:137315] Array String:

at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)

2016-06-28 16:37:21.556 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:22.808 WebServiceDemo[5407:137315] Array String:

at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()

2016-06-28 16:37:22.808 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:23.810 WebServiceDemo[5407:137315] Array String:

at System.Xml.XmlTextReaderImpl.ParseDocumentContent()

2016-06-28 16:37:23.811 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:24.696 WebServiceDemo[5407:137315] Array String:

at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()

2016-06-28 16:37:24.696 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:25.532 WebServiceDemo[5407:137315] Array String:

at System.Xml.XmlReader.MoveToContent()

2016-06-28 16:37:25.532 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:26.200 WebServiceDemo[5407:137315] Array String:

at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()

2016-06-28 16:37:26.200 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:26.986 WebServiceDemo[5407:137315] Array String:

at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()

2016-06-28 16:37:26.986 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:27.820 WebServiceDemo[5407:137315] Array String:

at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()

2016-06-28 16:37:27.820 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:28.705 WebServiceDemo[5407:137315] Array String:

at System.Web.Services.Protocols.SoapServerProtocol.Initialize()

2016-06-28 16:37:28.705 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:29.474 WebServiceDemo[5407:137315] Array String:

at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean

2016-06-28 16:37:29.475 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:30.309 WebServiceDemo[5407:137315] Array String: &

2016-06-28 16:37:30.309 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:31.129 WebServiceDemo[5407:137315] Array String: abortProcessing)

2016-06-28 16:37:31.130 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:31.881 WebServiceDemo[5407:137315] Array String:

--- End of inner exception stack trace ---

2016-06-28 16:37:31.882 WebServiceDemo[5407:137315] JSON DATA = (null)

2016-06-28 16:37:31.882 WebServiceDemo[5407:137315] (null)

I am not getting what the issue is. Data is retrive from server properly but at the time of posting is shows me error.

help me.

网友答案:

It' Finally run. Just I change the code

-(IBAction)sendDataUsingGet:(id)sender{

    [self sendDataToServer : @"GET"];
}
-(void) sendDataToServer : (NSString *) method{

    int UserId=idtxt.text;
    NSString *UserCode  = userTf.text;

    NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                             "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                             "<soap:Body>"
                             "<Method xmlns=\"http://tempuri.org/\">"
                             "<Paramener1>%d</Paramener1>"
                             "<Paramener2>%@</Paramener2>"
                             "</Method>"
                             "</soap:Body>"
                             "</soap:Envelope>",UserId,UserCode];

    NSData *postData = [soapMessage dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[soapMessage length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://URL/Method"]];
    [request setHTTPMethod:@"POST"];
    [request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    NSLog(@"URL = %@",request);
    //[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];
    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    NSLog(@"Connection link =%@",conn);
    if(conn) {
        mutableData =[[NSMutableData alloc] init];
        NSLog(@"Connection Successful");
    } else {
        NSLog(@"Connection could not be made");
    }

}

#pragma mark NSURLConnection delegates

-(void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *)response
{
    [mutableData setLength:0];
}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [mutableData appendData:data];
}

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    serverResponse.text = NO_CONNECTION;
    return;
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSXMLParser *myNSXMLParserfloorObj=[[NSXMLParser alloc]initWithData:mutableData];
    myNSXMLParserfloorObj.delegate=self;
    [myNSXMLParserfloorObj parse];
    NSLog(@"%@",myNSXMLParserfloorObj.parserError);
    NSString *responseStringWithEncoded = [[NSString alloc] initWithData: mutableData encoding:NSUTF8StringEncoding];
    //NSLog(@"Response from Server : %@", responseStringWithEncoded);
    NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[responseStringWithEncoded dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
    serverResponse.attributedText = attrStr;
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"Insert_UserData"])
    {
        myDataClassObj=[[mydata alloc]init];
    }
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    myMutableStringObj=[[NSMutableString alloc]initWithString:string];
    NSLog(@"Array String: %@",myMutableStringObj);
    NSData *data = [myMutableStringObj dataUsingEncoding:NSUTF8StringEncoding];
    responsedict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"JSON DATA = %@",responsedict);


}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{

}
网友答案:
Please be serialize the data before you will send

     NSURL *URL = [NSURL URLWithString:@"URL"];
            NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
            [request setValue:[NSString stringWithFormat:@"application/json"] forHTTPHeaderField:@"Content-Type"];
            [request setHTTPMethod:@"POST"];


            NSMutableArray *myArray = [[NSMutableArray alloc] init];
            [myArray addObject:param];

            NSError * err;
            NSData * jsonData = [NSJSONSerialization dataWithJSONObject:myArray options:0 error:&err];


            NSMutableData *postBody = [NSMutableData data];
            [postBody appendData:jsonData];

            //add the body to the post
            [request setHTTPBody:postBody];



    //    NSURL *URL = [NSURL URLWithString:@"URL"];
    //    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    //    [request setValue:[NSString stringWithFormat:@"application/raw"] forHTTPHeaderField:@"Content-Type"];
    //    [request setHTTPMethod:@"GET"];


        //    UploadDataCmd dataCmd = (UploadDataCmd )cmd;
        //    dataCmd.resource = [MyEFAPIResource getUploadMePhotoResource:param];
            AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
                                                 initWithRequest:request];
            operation.responseSerializer = [AFJSONResponseSerializer serializer];
            [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
             {
                 //[dataCmd filterData:responseObject];
                 NSLog(@"Pushed Done");
             } failure:^(AFHTTPRequestOperation operation, NSError error)
             {
                 //[dataCmd showError:error];
                  NSLog(@"Not Pushed");
             }];
            [operation start];
分享给朋友:
您可能感兴趣的文章:
随机阅读: