ios 使用 NSURLRequest 请求
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10080216/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Request with NSURLRequest
提问by Edelweiss
I'm trying do to an app which uses a database (actually in my localhost), I tried with ASIHTTPRequest but having so much troubles with iOS 5 (I learnt how to use ASIHTTPRequest form there : http://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-service
我正在尝试使用数据库(实际上在我的本地主机中)的应用程序,我尝试使用 ASIHTTPRequest 但在 iOS 5 上遇到了很多麻烦(我在那里学会了如何使用 ASIHTTPRequest 表单:http://www.raywenderlich.com /2965/how-to-write-an-ios-app-that-uses-a-web-service
Now i'm trying with the API provided by Apple : NSURLRequest / NSURLConnection etc,...
现在我正在尝试使用 Apple 提供的 API:NSURLRequest / NSURLConnection 等,...
I read the Apple online guide and make this first code :
我阅读了 Apple 在线指南并制作了第一个代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL
URLWithString:@"http://localhost:8888/testNSURL/index.php"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setValue:@"Hello world !" forKey:@"myVariable"];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
if (theConnection) {
receiveData = [NSMutableData data];
}
}
I added the delegates needed by the API
我添加了 API 所需的委托
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
Here is my php code :
这是我的 php 代码:
<?php
if(isset($_REQUEST["myVariable"])) {
echo $_REQUEST["myVariable"];
}
else echo '$_REQUEST["myVariable"] not found';
?>
So what is wrong? When I start the app, it will immediately crash with this output :
那么有什么问题呢?当我启动应用程序时,它会立即崩溃并显示以下输出:
**
**
**> 2012-04-09 22:52:16.630 NSURLconnextion[819:f803] *** Terminating app
> due to uncaught exception 'NSUnknownKeyException', reason:
> '[<NSURLRequest 0x6b32bd0> setValue:forUndefinedKey:]: this class is
> not key value coding-compliant for the key myVariable.'
> *** First throw call stack: (0x13c8022 0x1559cd6 0x13c7ee1 0x9c0022 0x931f6b 0x931edb 0x2d20 0xd9a1e 0x38401 0x38670 0x38836 0x3f72a
> 0x10596 0x11274 0x20183 0x20c38 0x14634 0x12b2ef5 0x139c195 0x1300ff2
> 0x12ff8da 0x12fed84 0x12fec9b 0x10c65 0x12626 0x29dd 0x2945) terminate
> called throwing an exception**
**
**
I guess, it means that somethings is wrong with this line :
我想,这意味着这一行有问题:
[request setValue:@"Hello world !" forKey:@"myVariable"];
It actually works if I comment this line.
如果我评论这一行,它实际上有效。
My question is : How can I send datas to a PHP API, using NSURLRequest and NSURLConnexion?
我的问题是:如何使用 NSURLRequest 和 NSURLConnexion 将数据发送到 PHP API?
Thank you for helping.
感谢您的帮助。
P.S. By the way, I have poor knowledges about server, PHP ect,...
PS顺便说一句,我对服务器,PHP等,...的了解很少。
回答by Mirko Lindner
try this:
尝试这个:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL
URLWithString:@"http://localhost:8888/testNSURL/index.php"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
NSString *postString = @"myVariable=Hello world !";
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
if (theConnection) {
receiveData = [NSMutableData data];
}
回答by Durai Amuthan.H
Try the below code it is one of the simple ways to consume a web service(json)
试试下面的代码,它是使用网络服务(json)的简单方法之一
NSURL *url = [NSURL URLWithString:@"yourURL"];
NSMutableURLRequest *urlReq=[NSMutableURLRequest requestWithURL:url];
NSURLResponse *response;
NSError *error = nil;
NSData *receivedData = [NSURLConnection sendSynchronousRequest:urlReq
returningResponse:&response
error:&error];
if(error!=nil)
{
NSLog(@"web service error:%@",error);
}
else
{
if(receivedData !=nil)
{
NSError *Jerror = nil;
NSDictionary* json =[NSJSONSerialization
JSONObjectWithData:receivedData
options:kNilOptions
error:&Jerror];
if(Jerror!=nil)
{
NSLog(@"json error:%@",Jerror);
}
}
}
Hope this helps.
希望这可以帮助。