我在使用NSURLConnection将POST数据发送到PHP脚本时遇到了一些问题。这是我的代码:
const char *bytes = [[NSString stringWithFormat:@"<?xml version=\"1.0\"?>\n<mydata>%@</mydata>", data] UTF8String];
NSURL *url = [NSURL URLWithString:@"http://myurl.com/script.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[NSData dataWithBytes:bytes length:strlen(bytes)]];
NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSLog(@"responseData: %@", responseData);我的script.php是这么简单的:
<?php
echo $_POST['mydata'];
?>这在过去对我很有效,但由于某些原因,我现在从NSLog(@"responseData: %@", responseData);得到的输出只是"<>“而不是"theData”。
可能是什么地方弄错了,但我好像找不到?有什么想法吗?
发布于 2010-01-15 21:33:04
你的数据错了。如果您希望在PHP的$_POST数组中找到数据,它应该如下所示:
const char *bytes = "mydata=Hello%20World";如果要发送XML数据,则需要设置不同的HTTP内容类型。例如,你可以设置
application/xml; charset=utf-8如果未设置HTTP内容类型,则默认类型
application/x-www-form-urlencoded将会被使用。此类型期望POST数据具有与GET请求中相同的格式。
但是,如果您设置了一个不同的HTTP Content Type,比如application/xml,那么这个数据就不会被添加到PHP中的$_POST数组中。您将不得不从输入流中读取原始数据。
试试这个:
NSString * str = [NSString stringWithFormat:@"<?xml version=\"1.0\"?>\n<mydata>%@</mydata>", data];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[str dataUsingEncoding:NSUTF8StringEncoding]];并在服务器上尝试以下PHP:
$handle = fopen("php://input", "rb");
$http_raw_post_data = '';
while (!feof($handle)) {
$http_raw_post_data .= fread($handle, 8192);
}
fclose($handle);请注意,只有当您的帖子的HTTP头不是application/x-www-form-urlencoded时,这才有效。如果它是应用程序/x-www-form-urlencoded,那么PHP自己读取所有post数据,对其进行解码(将其拆分为键/值对),最后将其添加到$_POST数组中。
https://stackoverflow.com/questions/2071788
复制相似问题