per*_*lot 21 iphone post nsurlconnection
我在使用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);
Run Code Online (Sandbox Code Playgroud)
而我的script.php就像这样简单:
<?php
echo $_POST['mydata'];
?>
Run Code Online (Sandbox Code Playgroud)
这在过去对我NSLog(@"responseData: %@", responseData);
有用,但由于某种原因,我从现在得到的输出只是"<>"而不是"theData".
可能在某处有些蹩脚的错误,但我似乎无法找到它?有任何想法吗?
Mec*_*cki 39
你的数据有误.如果您希望在PHP的$ _POST数组中找到数据,它应该如下所示:
const char *bytes = "mydata=Hello%20World";
Run Code Online (Sandbox Code Playgroud)
如果要发送XML数据,则需要设置不同的HTTP内容类型.你可能会设置
application/xml; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
如果未设置HTTP内容类型,则为默认类型
application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud)
将会被使用.此类型要求POST数据具有与GET请求中相同的格式.
但是,如果您设置不同的HTTP内容类型(如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]];
Run Code Online (Sandbox Code Playgroud)
并在服务器上尝试以下PHP:
$handle = fopen("php://input", "rb");
$http_raw_post_data = '';
while (!feof($handle)) {
$http_raw_post_data .= fread($handle, 8192);
}
fclose($handle);
Run Code Online (Sandbox Code Playgroud)
请注意,这仅适用于POST的HTTP标头不是application/x-www-form-urlencoded.如果它是application/x-www-form-urlencoded,则PHP本身会读取所有后期数据,对其进行解码(将其拆分为键/值对),最后将其添加到$ _POST数组中.
啊耶...干杯 但是responseData输出就像"<48656c6c 6f326f72 6c64>",你不用%@打印NSData吗? - per_pilot 2010年1月15日13:57
那是因为你显示"字节"值,你应该将它传递给NSString以查看真实的消息
NSString *string = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
NSLog(@"responseData: %@", string);
Run Code Online (Sandbox Code Playgroud)
NSString *post =[NSString stringWithFormat:@"usertype(%@),loginname(%@),password(%@)",txtuser.text,txtusername.text,txtpassword.text];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://www.dacinci.com/app/tes2/login_verify.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
60877 次 |
最近记录: |