私のiPhoneアプリからPOST要求を送信することに関連する非常に奇妙な問題があります。iPhone - '&'がHTTPリクエスト本体に含まれていると奇妙な動作が発生する
アプリは、HTTPポストデータをサードパーティのサービスに送信する必要があります。リクエストはXMLであり、XMLレスポンスを取得します。ここで要求を送信するための私のコードは次のとおりです。
-(void)sendRequest:(NSString *)aRequest
{
//aRequest parameter contains the XML string to send.
//this string is already entity-encoded
isDataRequest = NO;
//the following line will created string REQUEST=<myxml>
NSString *httpBody = [NSString stringWithFormat:@"%@=%@",requestString,aRequest];
//I'm not sure what this next string is doing, frankly, as I didn't write this code initially
httpBody = [(NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)httpBody, NULL, CFSTR("+"), kCFStringEncodingUTF8) autorelease];
NSData *aData = [httpBody dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:kOOURLRequest]] autorelease];
[request setHTTPBody:aData];
[request setHTTPMethod:@"POST"];
self.feedURLConnection = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
}
これがある限り、要求XMLは、例えば、このXML要求を&
記号が含まれていないとして完璧に動作します:予想通り
<?xml version="1.0"?>
<request type="search" group="0" language="en" version="2.5.2">
<auth>
<serial>623E1579-AC18-571B-9022-3659764542E7</serial>
</auth>
<data>
<location>
<lattitude>51.528536</lattitude>
<longtitude>-0.108865</longtitude>
</location>
<search>archive</search>
</data>
</request>
が送信されます正しい応答が期待どおりに受信されます。リクエストが(特に「検索」要素で)&
文字が含まれる場合
しかし、 - そのような:&
文字まで
<?xml version="1.0"?>
<request type="search" group="0" language="en" version="2.5.2">
<auth>
<serial>623E1579-AC18-571B-9022-3659764542E7</serial>
</auth>
<data>
<location>
<lattitude>51.528536</lattitude>
<longtitude>-0.108865</longtitude>
</location>
<search>& archive</search>
</data>
</request>
だけにすべてをサーバーに送信されます。サーバーはこの文字を超えて何も受信していないようです。 Androidアプリではほとんど同じコードが動作しており、すべて正常に動作しているため、サーバー上で問題はありません。
どのように私はこの固定を得ることができます任意のアイデアは大いに感謝します!
WireSharkまたはCharlesのようなネットワークモニタを使用して、実際に何が送信されているかを確認します。 – zaph
処理して送信するまでの間に文字列(NSLog it)をチェックアウトしてください。それはあなたがそれを行うすべての処理で切り捨てられているかもしれません。 –