0

NSMutableURLRequest を使用して (同期) POST リクエストを Web サービスに送信しています。リクエストの本文には、XML と JSON の組み合わせが含まれています。何かのようなもの :

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

JSON 文字列はエスケープされています ( escape()Javascript で使用)

相手側でリクエストを受け取ると、エスケープされたすべての文字がエスケープされていないことに気付きました!!

なぜこれが起こっているのか誰にも教えてもらえますか?どうすればこれを防ぐことができますか?

リクエストを送信するために使用しているコードは次のとおりです。

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 コードのみを変更できます。

4

1 に答える 1

0

多くの試行錯誤の後、私が思いついた唯一の解決策は、送信前にリクエスト本文で使用される文字列にすることです(送信中にエスケープされないため):

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

これは本当の意味での修正ではありませんが、単なる回避策です。しかし、それは私にとってはうまくいきます(これまでのところ)。

問題の根本的な原因についてはまだ手がかりがなく、より洗練された解決策を探しています。

于 2013-03-06T06:15:50.863 に答える