【发布时间】:2015-01-06 16:31:46
【问题描述】:
过去,我一直在使用以下代码将数据从我的应用程序发送到网络服务,该网络服务将数据保存在我公司的服务器上(网络服务是用 asp.net 编写的)。
- (NSArray *) callWebserviceWithPost:(NSString *)post andWithParser:(MyNSXMLParserDelegateClass *)parser
{
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://www.example.com/mywebservices/mywebservice.aspx"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
[request setTimeoutInterval:600];
NSHTTPURLResponse *response = nil;
NSError *err = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
if (!responseData)
{
NSString *msg = [NSString stringWithFormat:@"Response not recieved from web service"];
[Globals throwError:msg withCode:20 inMethod:_cmd onClass:[self class]];
return [NSArray arrayWithObject:errorString];
}
else
{
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
if ([[responseString substringToIndex:1] isEqualToString:@"<"])
{
// Create and init NSXMLParser object from data return by web service
NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:responseData];
[nsXmlParser setDelegate:parser];
BOOL success = [nsXmlParser parse];
if (success)
{
return parser.allItems;
}
}
}
}
帖子的样子
NSString *post = @"NewUser=<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<data>
<username>GeneralMike</username>
<status>Awesome</status>
</data>
</xml>"
到目前为止,这对我需要做的所有事情都很好。
但是,现在我需要在我的数据中发送一些特殊字符
...<username>"Frank"</username>...
我做了一些研究,discovered I can escape the special characters with certain codes。所以这个例子会变成
...<username>"Frank"</username>...
当我使用添加了转义的帖子调试我的 web 服务项目时,它工作正常。但是,当我尝试从我的应用程序调用 web 服务时,我在回复中收到错误消息,说
Unexpected end of file has occurred. The following elements are not closed: username,data. Line 1, position ....
计算提供的位置,我发现这个错误是在& 第一次转义的地方抛出的。
我还发现了很多建议我需要使用 stringByAddingPercentEscapesUsingEncoding 或 CFURLCreateStringByAddingPercentEscapes() 的东西,但是我尝试使用它们的每一种方式,网络服务都无法识别请求是什么。
为什么当我将它们直接放入 web 服务项目时,我链接的转义可以正常工作,但当我尝试从我的应用程序发送它们时却丢失了?我需要进行哪些更改才能让它们正常工作?
【问题讨论】:
标签: asp.net objective-c web-services nsurlrequest