使用NSURLConnection进行POST - 没有JSON

whi*_*adb 3 post xcode objective-c nsurlconnection

我想在Objective-C中编写一个iPhone应用程序.我需要使用NSURLConnection POST数据.我可以找到与JSON有关的每个例子; 我不需要使用JSON.我需要做的就是POST数据并从PHP脚本中获得简单的1或0(成功或失败).而已.

我遇到了这段代码,但我不知道如何使用它或修改它不使用JSON:

- (void)performRequest {
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL                   URLWithString:@"http://someplace.com/"]];
    [request setValue:@"Some Value" forHTTPHeaderField:@"Some-Header"];
    [request setHTTPBody:@"{\"add_json\":\"here\"}"];
    [request setHTTPMethod:@"POST"];
    [NSURLConnection connectionWithRequest:[request autorelease] delegate:self];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
 // Fail..
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
 // Request performed.
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ood 14

这是如何创建一个普通的帖子.

首先创建一个正确类型的请求:

NSURL *URL = [NSURL URLWithString:@"http://example.com/somepath"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
request.HTTPMethod = @"POST";
Run Code Online (Sandbox Code Playgroud)

现在将您的帖子数据格式化为URL编码的字符串,如下所示:

NSString *params = @"param1=value1&param2=value2&etc...";
Run Code Online (Sandbox Code Playgroud)

请记住使用百分比编码对各个参数进行编码.你不能完全依赖NSString stringByAddingPercentEscapesUsingEncoding方法(google找出原因),但这是一个好的开始.

现在我们将帖子数据添加到您的请求中:

NSData *data = [params dataUsingEncoding:NSUTF8StringEncoding];
[request addValue:@"8bit" forHTTPHeaderField:@"Content-Transfer-Encoding"];
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request addValue:[NSString stringWithFormat:@"%i", [data length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:data];
Run Code Online (Sandbox Code Playgroud)

就是这样,现在只需使用NSURLConnection(或其他)正常发送您的请求.

要解释回复的反应,请参阅Maudicus的回答.