如何使用AFNetworking或STHTTPRequest发出SOAP Web服务请求?

Paresh navadiya

我可以使用NSMutableURLRequestNSURLConnection来连接到SOAP Web服务,如下所示:

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>"
                         "<CelsiusToFahrenheit xmlns=\"http://www.w3schools.com/webservices/\">"
                         "<Celsius>140.0</Celsius>"
                         "</CelsiusToFahrenheit>"
                         "</soap:Body>"
                         "</soap:Envelope>"];

NSData *soapData = [soapMessage dataUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:@"http://w3schools.com/webservices/tempconvert.asmx"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]];

[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue: @"http://www.w3schools.com/webservices/CelsiusToFahrenheit" forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue:@"www.w3schools.com" forHTTPHeaderField:@"Host"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:soapData];

如何使用AFNetworkingSTHTTPRequest执行相同的操作

Paresh navadiya

STHTTPRequest

//create request
STHTTPRequest *request = [STHTTPRequest requestWithURL:url];
//set header here
[request setHeaderWithName:@"Host" value:@"www.w3schools.com"];
[request setHeaderWithName:@"SOAPAction" value: @"http://www.w3schools.com/webservices/CelsiusToFahrenheit"];
[request setHeaderWithName:@"Content-Type" value:@"text/xml; charset=utf-8"];
//set body here
request.rawPOSTData = soapData;

//completion block
request.completionBlock = ^(NSDictionary *headers, NSString *body) {
    NSLog(@"headers = %@\nbody = %@", headers, body);

    //parse xml string object here as request is successfull
    if (body.length > 0) 
    {
       NSError *error= nil;
       NSDictionary *dict = [XMLReader dictionaryForXMLString:body error:&error];
       if (!error) 
       {
         NSLog(@"XML Dictionary: %@",dict);
         //do necessary requirement here
       }
       else
         NSLog(@"Error while parsing xml data : %@",[error description]);

    }
    else
      NSLog(@"No response from request");
};

//error block
request.errorBlock = ^(NSError *error) {
    NSLog(@"%@",[error description]);
};

//start request
[request startAsynchronous];

AF网络

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:theRequest];

operation.responseSerializer = [AFXMLParserResponseSerializer serializer];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    //parse NSXMLParser object here if request successfull
    if ([responseObject isKindOfClass:[NSXMLParser class]]) {
        NSXMLParser *parser = (NSXMLParser *)responseObject;
        NSDictionary *dict = [XMLReader dictionaryForNSXMLParser:parser];
        NSLog(@"JSON: %@ : %@", responseObject,dict);
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
[[NSOperationQueue mainQueue] addOperation:operation];

这里XMLReader提供NSDictionaryXMLData使用NSXMLParser

我在XMLReader类中又添加了一种方法

+(NSDictionary*)dictionaryForNSXMLParser:(NSXMLParser*)parser error:(NSError **)error

编辑:方法说明

+ (NSDictionary *)dictionaryForNSXMLParser:(NSXMLParser *)xmlParser error:(NSError **)error
{
  XMLReader *reader = [[XMLReader alloc] initWithError:error];
  NSDictionary *rootDictionary = [reader objectWithNSXMLParser:xmlParser options:0];
  return rootDictionary;
}

objectWithNSXMLParser 方法。

- (NSDictionary *)objectWithNSXMLParser:(NSXMLParser *)xmlParser options:(XMLReaderOptions)options
{
  // Clear out any old data
  self.dictionaryStack = [[NSMutableArray alloc] init];
  self.textInProgress = [[NSMutableString alloc] init];

  // Initialize the stack with a fresh dictionary
  [self.dictionaryStack addObject:[NSMutableDictionary dictionary]];

  [xmlParser setShouldProcessNamespaces:(options & XMLReaderOptionsProcessNamespaces)];
  [xmlParser setShouldReportNamespacePrefixes:(options & XMLReaderOptionsReportNamespacePrefixes)];
  [xmlParser setShouldResolveExternalEntities:(options & XMLReaderOptionsResolveExternalEntities)];

  xmlParser.delegate = self;
  BOOL success = [xmlParser parse];

  // Return the stack's root dictionary on success
  if (success)
  {
    NSDictionary *resultDict = [self.dictionaryStack objectAtIndex:0];
    return resultDict;
  }

  return nil;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用AFNetworking或STHTTPRequest发出SOAP Web服务请求?

来自分类Dev

Soap Web服务请求与HTTP POST请求?

来自分类Dev

Soap Web服务请求与HTTP POST请求?

来自分类Dev

如何从 dataTaskWithRequest 打印 Web 服务请求和响应

来自分类Dev

在Xamarin中使用New Relic跟踪Web服务请求

来自分类Dev

AFNetworking 2.0,SOAP Web服务:如何发出请求?

来自分类Dev

如何为自动生成的SOAP Web服务请求提供相同的接口?

来自分类Dev

请求咨询:如何将WCF Web服务请求信息记录到数据库

来自分类Dev

Web服务请求在SOAP UI中工作,但在Jmeter中失败

来自分类Dev

如何使用log4j2记录CXF Web服务请求?

来自分类Dev

如何使用Web服务请求检索具有偏移量和限制的数据?

来自分类Dev

如何等待服务请求(RQS)

来自分类Dev

如何向服务请求权限

来自分类Dev

如何在sencha touch中的ajax调用剩余Web服务请求中将标头添加为参数

来自分类Dev

我可以使用Akka限制在分布式系统中提出的Web服务请求吗?

来自分类Dev

如何在IOBluetooth / CoreBluetooth中使用服务请求?

来自分类Dev

如何在服务请求上使用switchmap?

来自分类Dev

调试Web服务请求

来自分类Dev

Ajax Web服务请求

来自分类Dev

如何停止nginx在我的公共IP上服务请求?

来自分类Dev

使用SIGSTOP停止的服务请求的处理结果

来自分类Dev

显示Javascript Ajax Web服务请求

来自分类Dev

VBScript / CATScript Web服务请求Unix

来自分类Dev

来自WPF的异步Web服务请求

来自分类Dev

如何通过使用SOAPpy发出SOAP请求?

来自分类Dev

如何使用FRENDS发出SOAP请求?

来自分类Dev

如何在服务请求和指令中使用Angular作用域

来自分类Dev

ipTables,如何阻止IP的端口80上的所有服务请求?

来自分类Dev

New Relic Python代理能否跟踪不使用httplib的外部服务请求?

Related 相关文章

  1. 1

    如何使用AFNetworking或STHTTPRequest发出SOAP Web服务请求?

  2. 2

    Soap Web服务请求与HTTP POST请求?

  3. 3

    Soap Web服务请求与HTTP POST请求?

  4. 4

    如何从 dataTaskWithRequest 打印 Web 服务请求和响应

  5. 5

    在Xamarin中使用New Relic跟踪Web服务请求

  6. 6

    AFNetworking 2.0,SOAP Web服务:如何发出请求?

  7. 7

    如何为自动生成的SOAP Web服务请求提供相同的接口?

  8. 8

    请求咨询:如何将WCF Web服务请求信息记录到数据库

  9. 9

    Web服务请求在SOAP UI中工作,但在Jmeter中失败

  10. 10

    如何使用log4j2记录CXF Web服务请求?

  11. 11

    如何使用Web服务请求检索具有偏移量和限制的数据?

  12. 12

    如何等待服务请求(RQS)

  13. 13

    如何向服务请求权限

  14. 14

    如何在sencha touch中的ajax调用剩余Web服务请求中将标头添加为参数

  15. 15

    我可以使用Akka限制在分布式系统中提出的Web服务请求吗?

  16. 16

    如何在IOBluetooth / CoreBluetooth中使用服务请求?

  17. 17

    如何在服务请求上使用switchmap?

  18. 18

    调试Web服务请求

  19. 19

    Ajax Web服务请求

  20. 20

    如何停止nginx在我的公共IP上服务请求?

  21. 21

    使用SIGSTOP停止的服务请求的处理结果

  22. 22

    显示Javascript Ajax Web服务请求

  23. 23

    VBScript / CATScript Web服务请求Unix

  24. 24

    来自WPF的异步Web服务请求

  25. 25

    如何通过使用SOAPpy发出SOAP请求?

  26. 26

    如何使用FRENDS发出SOAP请求?

  27. 27

    如何在服务请求和指令中使用Angular作用域

  28. 28

    ipTables,如何阻止IP的端口80上的所有服务请求?

  29. 29

    New Relic Python代理能否跟踪不使用httplib的外部服务请求?

热门标签

归档