ASIHTTPRequest 将 json 发送到 php 服务器

Posted

技术标签:

【中文标题】ASIHTTPRequest 将 json 发送到 php 服务器【英文标题】:ASIHTTPRequest post json to php server 【发布时间】:2011-03-17 10:50:34 【问题描述】:

在过去的 5 个小时里,我一直在尝试将 json 对象发布到 php 脚本中。我已经阅读了所有文档,似乎代码应该可以工作,但不能。请求已发出并接收正常,但我无法访问发布的 json 数据,甚至不知道它是否已正确发送。我不断得到一个空的 php 数组,而不是 json 数据。

NSString *jsonString = [self.tableDataSource JSONRepresentation];

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


[request addRequestHeader:@"User-Agent" value:@"ASIHTTPRequest"]; 
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request appendPostData:[jsonString  dataUsingEncoding:NSUTF8StringEncoding]]; 
[request startSynchronous];

这里是php脚本(test.php)

$handle = fopen('php://input','r');
$jsonInput = fgets($handle);
$decoded = json_decode($jsonInput,true);
print_r($decoded);

我正在使用来自https://github.com/pokeb/asi-http-request.git 的最新 ASIHttpRequest 代码

我做错了什么??????

干杯, 旅游。

【问题讨论】:

这需要基本的调试。我没有 iPhone 开发经验,但必须有可以显示成功状态和请求响应正文的监控工具。 PHP端可以激活error_reporting(E_ALL);输出任何可能出现的问题。 您不需要访问 $_POST[] 变量吗? 嗨 Pekka,当我打开 error_reporting(E_ALL) 时没有返回任何内容。你有更多的想法吗? 嗨,Les,我试过 print_r($_POST) 和 print_r($_GET);我仍然无法获得任何 json 数据。还有什么想法吗? 【参考方案1】:

发现问题。我在 apache vhost 配置中有一个 SSL 重定向。使用 tcp 数据包嗅探器找到它。一旦我删除了重定向,我就能够接收到 json 数据:

$handle = fopen('php://input','r');
$jsonInput = fgets($handle);
$decoded = json_decode($jsonInput,true);
print_r($decoded);

感谢所有帮助过的人。

【讨论】:

【参考方案2】:

我相当确定 ASIHTTPRequest 默认为 GET 请求。您正在尝试发布数据,所以我认为这行不通。

尝试使用为发布数据而构建的 ASIFormDataRequest。或者,至少将请求方法更改为 POST。

 [request  setRequestMethod:@"POST"];

【讨论】:

嗨 gnuchu,已经尝试了 setRequestMethod "POST" 和 ASIFormDataRequest 以及 print_r($_POST) 和 print_r($_GET);我仍然无法获得任何 json 数据。还有什么想法吗? 我没有尝试过 setRequestMethod 但我在一些应用程序中使用了 ASIFormDataRequest 并且效果很好。我无法诊断问题是否出在 php 方面,因为我对 php 了解不多。

以上是关于ASIHTTPRequest 将 json 发送到 php 服务器的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上从 ASIHTTPRequest 转换为 AFNetworking

ASIHTTPRequest + WCF POST XML

ASIHTTPRequest 返回 HTML 而不是 JSON

使用 Asihttprequest 和 iPhone 的 Json 框架解析 JSON 数据

ASIHTTPRequest 和 ASINetworkQueue 以及 JSON 解析

如何用 ASIHttpRequest JSON 数据填充 UITableView?