【问题标题】:$_POST data from iOS getting lost when calling PHP web service调用 PHP Web 服务时来自 iOS 的 $_POST 数据丢失
【发布时间】:2012-05-16 22:12:50
【问题描述】:

我只是一个初级 iOS 开发人员,但我是一名全职 PHP 开发人员。我的 iOS 开发人员的应用程序通过 POST 调用我的网络服务,但无论出于何种原因,我的网络服务都没有正确接收响应。

这是他开发的 Objective-C 代码:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSData* requestData = [NSData dataWithBytes:[@"{\"method\":\"referrals\",
\"params\":
[{\"iv\":\"some iv value\",
\"data\":
{\"first_name\":\"pEBquIatFcWCrgEVHFhzhw==\",
\"cellular_ipv4\":\"ypMBZu80ZIeVrTpEH0daTg==\",
\"last_name\":\"353YvmRmSw9sKQ+lBrKKcg==\",
\"email\":\"tTiWcT14kuVVgmKuu7PoIw==\",
\"sent_via\":\"69JPdtxeHCAdG/cECGYg5A==\"}
}],
\"id\":\"1\"}" UTF8String] length:[reqString length]];


[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: requestData];


if (urlConnection != nil) {
[urlConnection release];
urlConnection = nil;
}


urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
[request release];

据我们所知,它是通过附加到键“referrals”的 POST 发送数据。但是,当我的 PHP Web 服务检查 $_POST 变量中的 'referrals' 键时,它没有找到它。这是相关的PHP代码:

if(array_key_exists('referrals', $_POST))
{
    //some code
}else
{
    //error response
}

// Send JSON response
//header('Content-type: application/json');
echo $message;

iOS 应用始终返回错误响应,该响应仅在 $_POST 中存在'referrals'时设置。我已经使用 CURL 对 PHP Web 服务进行了单元测试,并始终获得成功的结果。

错误在哪里?

【问题讨论】:

  • 改用var_dump($_POST);
  • 我的 iOS 开发人员晚上回家了,所以直到早上我才能测试它。虽然我创建了一个脚本来获取 $_POST 变量的内容以检查正在发送的内容。但到目前为止,数据尚无定论。希望有一些我们没有看到的非常明显的东西。
  • 自从我做 php 以来已经有一段时间了,但是 php 会检测内容类型并自动为您解析 json 还是 $_POST 仅用于表单编码参数?

标签: php objective-c ios web-services post


【解决方案1】:

你的 PHP 行不应该是这个吗?

if(array_key_exists('method', $_POST))

您应该在服务器端进行调试。例如,您可以将var_dump($_POST) 的内容写入文件。

【讨论】:

  • 问题是,我们已经改变并测试了两种方式......但没有运气。
  • 那么 var_dump($_POST) 的结果是什么?
  • 目前,转储只是Array(),这表明没有任何通过...所以,我使用本地 Ubuntu 安装中的 CURL 在外部服务器上对其进行了测试...还是一样。 $_POST 似乎没有任何进展。这可能是配置错误的 Apache/PHP5 设置吗?
【解决方案2】:

您要在哪个 URL 上尝试此操作?如果您在模拟器上运行,并且您的 PHP 脚本位于 localhost 上,如果您尝试访问像 http://localhost/myscript.php 这样的 url,它可能无法正常工作,这是因为如果模拟器是虚拟机,它可能有自己的 localhost

在 Android 模拟器中,http://10.0.2.2 是主机的地址

【讨论】:

  • 收到一个响应...只有当“if”失败并且调用“else”时发送的响应...
  • @ScottTRogers var_dump($_POST) 给你什么?
  • 目前,转储只是 Array(),这表明没有任何通过...所以,我使用本地 Ubuntu 安装中的 CURL 在外部服务器上对其进行了测试...还是一样。 $_POST 似乎没有任何进展。这可能是配置错误的 Apache/PHP5 设置吗?
  • 在你的POST请求中,body里面有什么内容?我不相信这是您必须查看的设置
  • 尝试设置 Content-Type : application/x-www-form-urlencoded 和你的 body 为refers=Testing
【解决方案3】:

事实证明,PHP 代码不是问题,而是他用来通过 POST 发送请求的方法。我无法从他那里明确地找出具体问题是什么,因为他必须多次重写才能使其正常工作。据我了解,Objective-C 发送 POST 数据的方式必须进行调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多