目标C:http POST请求获取非转义

时间:2013-03-04 08:28:27

标签: ios objective-c http nsurlconnection nsurlrequest

我正在使用NSMutableURLRequest向Web服务发送(同步)POST请求。 请求正文包含XML和JSON的组合。类似的东西:

<element>
 <element 2>
 <![CDATA[
  {"jsondata1":{"datafield1":"data1"},
   "jsondata2":"some data"
  }
 ]]>
 </element 2>
</element>

JSON字符串已被转义(在Javascript中使用escape()

当我在另一端收到请求时,我注意到所有转义的字符都没有被转义!!

谁能告诉我为什么会这样?我该如何防止这种情况?

以下是我用来发送请求的代码:

NSURL *url = [NSURL URLWithString:@"https://my-webservice.com/something.do"];
NSData *xmlResponseDataSave;
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d",[xmlRequestString length]];
[req addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[req setHTTPMethod:@"POST"];
NSData *saveData=[xmlRequestString dataUsingEncoding:NSUTF8StringEncoding];
[req setHTTPBody:saveData];

NSError *error=nil;

NSURLResponse *resp=[[NSURLResponse alloc] init];
xmlResponseData=[NSURLConnection sendSynchronousRequest:req returningResponse:&resp error:&error];
NSString *xmlResponseString=[[NSString alloc] initWithData:xmlResponseData encoding:NSUTF8StringEncoding];

请注意:我无法对xml或Web服务进行任何更改。我只能改变目标c代码。

1 个答案:

答案 0 :(得分:0)

经过大量的反复试验后,我能想出的唯一解决方案就是在发送之前在请求体中使用字符串(因为在发送时它会被转义):

xmlRequestString=[xmlRequestString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *saveData=[xmlRequestString dataUsingEncoding:NSUTF8StringEncoding];

虽然这不是真正意义上的解决方案,但只是一个解决方法。但它对我有用(到目前为止)。

我仍然不了解问题的根本原因,我仍在寻找更优雅的解决方案。