ASIHTTPRequest向PHP服务器发送JSON数据的POST请求

8

我已经尝试了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代码。

我做错了什么吗?

谢谢, Trav.


2
这需要基本的调试。我没有iPhone开发经验,但一定有监控工具可以显示请求的成功状态和响应体。在PHP端,您可以激活error_reporting(E_ALL);来输出任何可能出现的问题。 - Pekka
1
你不需要访问 $_POST[] 变量吗? - Lee Armstrong
嗨Pekka,当我打开error_reporting(E_ALL)时,没有任何返回值。你还有更多的想法吗? - johnstontrav
嗨Les,我已经尝试过print_r($_POST)和print_r($_GET);但我仍然无法获取任何json数据。还有其他想法吗? - johnstontrav
2个回答

4

发现问题所在。我在Apache vhost配置中设置了SSL重定向。使用TCP数据包嗅探器找到它。一旦我删除了重定向,就能够接收JSON数据:

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

感谢所有提供帮助的人。

3

我相当确定ASIHTTPRequest默认使用GET请求。您正在尝试POST数据,因此我认为这将无法正常工作。

尝试使用专门用于POST数据的ASIFormDataRequest。或者,至少将请求方法更改为POST。

 [request  setRequestMethod:@"POST"];

1
你好gnuchu,我尝试了setRequestMethod "POST" 和ASIFormDataRequest以及print_r($ _POST)和print_r($ _GET); 但我仍然无法获取任何json数据。还有其他想法吗? - johnstontrav
我尚未尝试过setRequestMethod,但我在几个应用中使用ASIFormDataRequest,它表现良好。然而,由于我对php了解有限,无法确定问题是否出在php方面。 - gnuchu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接