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 返回 HTML 而不是 JSON
使用 Asihttprequest 和 iPhone 的 Json 框架解析 JSON 数据