-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];

/編集

申し訳ありませんが、GETではなくPOSTを実行しているのを見たところ、次のように動作するはずです。

POSTを使用したNSURLConnection

于 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 に答える