-1

我知道已经有一些关于它的答案,但我发誓我仍然没有找到一个明确的答案。我的问题很直接:如何向 PHP 页面发送 POST 请求?

奖励问题:我正在尝试在本地服务器(MAMP)上执行此操作。我需要改变一些东西才能让它工作吗?

4

2 回答 2

1

像这样的东西应该工作:

NSURL *requestURL = [NSURL URLWithString:@"127.0.0.1/index.php?id=0"];
NSURLRequest *request = [NSURLRequest requestWithURL:requestURL];

NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];

/编辑

对不起,我刚刚看到你在 POST 之后,而不是 GET,这样的东西应该可以工作:

NSURLConnection 与 POST

于 2012-06-15T16:03:14.657 回答
1

这是我的做法。注意:这是一个同步请求;您也可以以异步方式执行此操作。后者对于云服务器来说是更好的风格,但对于本地服务器不会有太大的区别。

另外,我假设您正在提交一组表单字段(模拟 HTML 表单),而不是其他一些数据格式。在 PHP 端,这些字段可作为 $_POST 集合使用。

在下面的示例中,字段和值是虚拟的。替换真实的。

NSString *URLEncode(NSString *s)
{
    return [s stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
} 

void SendPOST()
{
    NSMutableURLRequest *Req = [[NSMutableURLRequest alloc] initWithURL:
        [NSURL URLWithString:@"http://localhost/path/file.php"]];
    //Plug a sensible URL here

    [Req addValue: @"application/x-www-form-urlencoded"
        forHTTPHeaderField: @"Content-Type"];
    [Req setHTTPMethod: @"POST"];

    //Let's compose the POST data out of fields and values!
    NSMutableString *POSTData = [NSMutableString stringWithCapacity:1000];
    [POSTData appendString: @"Param1="];
    [POSTData appendString: URLEncode(@"Value1")];
    [POSTData appendString: @"&Param2="];
    [POSTData appendString: URLEncode(@"Value2")];

    [Req setHTTPBody: [POSTData dataUsingEncoding: NSUTF8StringEncoding]];      
    //Your encoding might vary 

    NSURLResponse *Resp;
    NSError *Err;
    NSData *d = [NSURLConnection sendSynchronousRequest:Req
        returningResponse:&Resp error:&Err];
    if([(NSHTTPURLResponse*)Resp statusCode] != 200)
        NSLog(@"We have an error: %d", [(NSHTTPURLResponse*)Resp statusCode]);
    else
    {
        NSString *s = [[NSString alloc] initWithData:d
            encoding: NSUTF8StringEncoding];
        NSLog(@"Got some data back: %@", s);
        [s release]; //Not needed if you're using ARC.
    }   
}
于 2012-06-15T17:22:47.397 回答