首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用NSURLRequest通过POST将键-值对传递给PHP脚本

使用NSURLRequest通过POST将键-值对传递给PHP脚本
EN

Stack Overflow用户
提问于 2010-03-30 19:15:57
回答 5查看 30.4K关注 0票数 16

我是objective-c的新手,我希望使用POST将许多键-值对传递给PHP脚本。我使用了以下代码,但数据似乎并未通过发布。我也尝试过使用NSData发送邮件,但似乎都不起作用。

代码语言:javascript
复制
 NSDictionary* data = [NSDictionary dictionaryWithObjectsAndKeys:
    @"bob", @"sender",
    @"aaron", @"rcpt",
    @"hi there", @"message",
    nil];

 NSURL *url = [NSURL URLWithString:@"http://myserver.com/script.php"];
 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

 [request setHTTPMethod:@"POST"];
 [request setHTTPBody:[NSData dataWithBytes:data length:[data count]]];

  NSURLResponse *response;
  NSError *err;
  NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
  NSLog(@"responseData: %@", content);

这将被发送到这个简单的脚本,以执行数据库插入:

代码语言:javascript
复制
<?php $sender = $_POST['sender'];
      $rcpt = $_POST['rcpt'];
      $message = $_POST['message'];

      //script variables
      include ("vars.php");

      $con = mysql_connect($host, $user, $pass);
      if (!$con)
      {
        die('Could not connect: ' . mysql_error());
      }

      mysql_select_db("mydb", $con);

      mysql_query("INSERT INTO php_test (SENDER, RCPT, MESSAGE) 
      VALUES ($sender, $rcpt, $message)");

      echo "complete"
?>

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-31 18:24:55

感谢大家的建议。最后,我设法通过使用给定的here解决了这个问题。

代码:

代码语言:javascript
复制
NSString *myRequestString = @"sender=my%20sender&rcpt=my%20rcpt&message=hello";
NSData *myRequestData = [ NSData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ];
NSMutableURLRequest *request = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString: @"http://people.bath.ac.uk/trs22/insert.php" ] ]; 
[ request setHTTPMethod: @"POST" ];
[ request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[ request setHTTPBody: myRequestData ];
NSURLResponse *response;
NSError *err;
NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err];
NSString *content = [NSString stringWithUTF8String:[returnData bytes]];
NSLog(@"responseData: %@", content);
票数 35
EN

Stack Overflow用户

发布于 2010-10-22 21:27:56

这是错误的:

代码语言:javascript
复制
[NSData dataWithBytes:[post UTF8String] length:[post length]]

长度应以字节数表示,而不是以UTF8字符数表示。您应该使用下面这一行而不是:

代码语言:javascript
复制
NSData *data = [post dataUsingEncoding: NSUTF8StringEncoding]; 
票数 4
EN

Stack Overflow用户

发布于 2010-03-30 23:50:49

在我看来,这行[request setHTTPBody:[NSData dataWithBytes:data length:[data count]]];看起来很不对劲。

我认为你想要:[request setAllHTTPHeaderFields:data];

其次,您会发现Cocoa框架在发送字段名称之前将它们的第一个字母大写(令人讨厌)。您可能需要做一些更改来应对这种情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2544650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档