0

我正在寻找从 iPhone SDK 调用 HTTP_POST 到我服务器上的 php 文件。如果我在下面调用它:

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://*****/api2/index.php"]];

[request setHTTPMethod:@"POST"];
[request addValue:@"postValues" forHTTPHeaderField:@"METHOD"];

//create data that will be sent in the post
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setValue:@2 forKey:@"value1"];
[dictionary setValue:@"This was sent from ios to server" forKey:@"value2"];

//serialize the dictionary data as json
NSData *data = [[dictionary copy] JSONValue];

[request setHTTPBody:data]; //set the data as the post body
[request addValue:[NSString stringWithFormat:@"%d",data.length] forHTTPHeaderField:@"Content-Length"];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(!connection){
    NSLog(@"Connection Failed");
}

服务器上的php代码

if ($_SERVER['HTTP_METHOD'] == 'postValues'){ 
$body = $_POST; 
$id;// value1 from dictionary 
$name; // value2 from dictionary
}

请帮助 $id 和 $name

4

2 回答 2

1

首先,这个请求的方法是POST,不是postValues。您所做的只是添加一个带有 name和 value的标头,因此,如果您想检查它,您需要查看您正在使用的任何服务器与 PHP 之间的接口。对于 Apache,这是.METHODpostValuesapache_request_headers()

然后,如果您将 JSON 对象设置为请求的主体,那么您需要读取主体以获取它。为此,您需要阅读php://input. 因此,您的示例变为:

$body = json_decode(file_get_contents('php://input'), true);
$id = $body['value1'];// value1 from dictionary 
$name = $body['value2']; // value2 from dictionary
于 2013-04-12T09:16:11.200 回答
0

您可以在查询中发送额外的值(并使用 $_GET 检索)或者您可以将值放在您的 json 数据中。

此外,将 json 作为对象检索的正确方法是:

$bodyAsObject = json_decode( file_get_contents('php://input') );
于 2013-04-12T08:54:49.667 回答