Objective-C调用Web Service示例
Objective-C调用Web Service示例
因为有的Web Service参数要求有顺序,所以参数用了NSArray
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
+ ( NSData *) SoapCall:( NSString *)method PostData:( NSString *)post { NSData *postData = [post dataUsingEncoding: NSUTF8StringEncoding allowLossyConversion: NO ]; NSString *postLength = [ NSString stringWithFormat:@ "%d" , [postData length]]; [postData autorelease]; NSString *soapAction = [ NSString stringWithFormat:@ "%s/%@" ,SoapPrefix , method ]; NSURL *url=[[ NSURL alloc]initWithString:[ [ NSString alloc ] initWithUTF8String: SoapURL ] ]; NSMutableURLRequest *request=[[ NSMutableURLRequest alloc]init]; [request setTimeoutInterval: 10 ]; [request setCachePolicy: NSURLRequestReloadIgnoringCacheData ]; [request setURL: url ] ; [request setHTTPMethod:@ "POST" ]; [request setValue:@ "text/xml; charset=utf-8" forHTTPHeaderField:@ "Content-Type" ]; [request setValue:soapAction forHTTPHeaderField:@ "SOAPAction" ]; [request setValue:postLength forHTTPHeaderField:@ "Content-Length" ]; [request setHTTPBody:postData]; NSError *err= nil ; NSData *data=[ NSURLConnection sendSynchronousRequest:request returningResponse: nil error:&err]; return data ; } + ( NSData *)SoapInvoke:( NSString *)method params:( NSArray *)params { NSMutableString * post = [[ NSMutableString alloc ] init ] ; [ post autorelease ]; [ post appendString: @ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"" " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" "<soap:Body>\n" ]; [ post appendString:@ "<" ]; [ post appendString:method]; [ post appendString:@ ">\n" ]; for ( NSDictionary *dict in params) { NSString *value = nil ; NSString *key = [[dict keyEnumerator] nextObject]; if (key != nil ) { value = [dict valueForKey:key]; [ post appendString:@ "<" ]; [ post appendString:key]; [ post appendString:@ ">" ]; if ( value != nil ) { [ post appendString:value]; } else { [ post appendString:@ "" ]; } [ post appendString:@ "</" ]; [ post appendString:key]; [ post appendString:@ ">\n" ]; } } [ post appendString:@ "</" ]; [ post appendString:method]; [ post appendString:@ ">\n" ]; [ post appendString: @ "</soap:Body>\n" "</soap:Envelope>\n" ]; // NSString *filePath = [[NSBundle mainBundle] pathForResource:@"login" ofType:@"json"]; // NSString *test = [NSString stringWithContentsOfFile:filePath]; NSLog (@ "====================request=========================\n%@\n" , post); return [ self SoapCall:method PostData:post]; } |