ios - 如何在 ios 中向 soap webservice 发送请求?

标签 ios soap afnetworking nsurlconnection

您好,我想向 soap 网络服务发送请求。我在 AFnetworking 中尝试并收到内部服务器错误 500,现在我在 nsurlconnection 中尝试,但它也显示状态代码 400。请任何人帮助我。谢谢提前听到我的代码。

NSString *soapString = [NSString stringWithFormat:
                                    @"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"><soap12:Body><addBusOrder xmlns=\"http://tempuri.org/\"><UserUniqueID>ok//8FjcvEKWMeeJJZHKYA</UserUniqueID><PlatFormID>4</PlatFormID><DeviceID>E3D2FCF6-F41B-4275-BD34-FAA31307EFFE</DeviceID><RouteScheduleId>532875503</RouteScheduleId><JourneyDate>2016-03-25</JourneyDate><FromCityid>734</FromCityid><ToCityid>202</ToCityid><TyPickUpID>22860424</TyPickUpID><Contactinfo><Name>vinod</Name><Email>katragadda.vinod@gmail.com</Email><Phoneno>7842768497</Phoneno><mobile>8801720427</mobile></Contactinfo><pass><passenger><passengerName>kumar</passengerName><Age>23</Age><Fare>1072</Fare><Gender>M</Gender><Seatno>D3</Seatno></passenger></pass></addBusOrder></soap:Body></soap:Envelope></addBusOrder></soap12:Body></soap12:Envelope>"];
            NSLog(@"soapString %@",soapString);

    NSString *msgLength = [NSString stringWithFormat:@"%li", [soapString length]];

    NSString *queryString = [NSString stringWithFormat: @"https://asprel.in/Service/AppServices.asmx/addBusOrder"];

    NSURL *url = [NSURL URLWithString:queryString];

    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

    [req addValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
    [req addValue:@"http://tempuri.org/addBusOrder" forHTTPHeaderField:@"SOAPAction"];
    [req setHTTPMethod:@"POST"];
    [req setHTTPBody: [soapString dataUsingEncoding:NSUTF8StringEncoding]];


    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [NSURLConnection sendAsynchronousRequest:req queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError) {
            NSLog(@"error %@",connectionError);
        }else{
            NSLog(@"data %@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        }


        NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
        [parser parse];

    }];
}

错误:

status code: 500, headers {
    "Access-Control-Allow-Origin" = "*";
    "Cache-Control" = private;
    "Content-Length" = 322;
    "Content-Type" = "text/plain; charset=utf-8";
    Date = "Thu, 24 Mar 2016 07:08:32 GMT";
    Etag = "\"\"";
    Server = "Microsoft-IIS/8.0";
    "X-AspNet-Version" = "4.0.30319";

最佳答案

您需要API授权

尝试添加授权

 // Create the request
 NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];

// New Create the connection
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSession *session = [NSURLSession sharedSession];//sessionWithConfiguration:defaultConfigObject delegate:self delegateQueue:[NSOperationQueue mainQueue]];

//  NSURLCredential *creds = [NSURLCredential credentialWithUser:self.username password:self.password persistence:NSURLCredentialPersistenceForSession];

NSString *authStr = [NSString stringWithFormat:@"%@:%@",username API,password API];// @"username:password";

NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];

NSString *authValue = [NSString stringWithFormat: @"Basic %@",[authData base64EncodedStringWithOptions:0]];

// Part Important
[request setValue:authValue forHTTPHeaderField:@"Authorization"];

[request addValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[request addValue:@"http://tempuri.org/addBusOrder" forHTTPHeaderField:@"SOAPAction"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody: [soapString dataUsingEncoding:NSUTF8StringEncoding]];

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request     
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

                 NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
                [parser parse];

                NSLog(@"%@",responseData);
                    if (error) {
                         [self handleError: error];
                    }
 }];

[dataTask resume];

NSLog(@"Header Request--->> %@",request.allHTTPHeaderFields);

关于ios - 如何在 ios 中向 soap webservice 发送请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36194994/

相关文章:

ios - kAudioUnitSubType_VoiceProcessingIO 音频 IO 单元子类型的音频图初始化错误

ios - AFNetworking 和 Expecta

ios - AFNetworking:失败时如何获取响应字符串?

iPhone Storyboard,以编程方式调用 segues,导航问题

ios - 为什么按下 viewController 时键盘自动弹出

ios - 如何通过向左或向右滑动来实现 3D Touch 预览 Action ?

java - 将Web服务请求转换为内部表示?

c# - 在 C# 中将 Soap XML 解析为对象

javascript - 如何使用谷歌应用程序脚本调用 SOAP 网络服务

ios - AFNetworking 响应显示在日志中,但在调试器中为零