我将一个JOSN对象从Java传递给PHP。我正在使用jdk 1.8 ang WAMP服务器。 下面是Java代码。
import java.io.IOException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.simple.JSONObject;
/**
*
* @author PReeeT Dash
*/
public class FromJava
{
public static void main(String[] args) throws IOException
{
JSONObject json = new JSONObject();
json.put("someKey", "someValue");
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
try
{
HttpPost request = new HttpPost("http://localhost/PGP/JSONReq/tophp.php");
StringEntity params = new StringEntity(json.toString());
request.addHeader("content-type", "application/json");
request.setEntity(params);
httpClient.execute(request);
// handle response here...
} catch (Exception ex)
{
System.out.println("Error: Cannot Estabilish Connection");
}
finally
{
httpClient.close();
}
}
}
PHP脚本:
$data = json_decode(file_get_contents("php://input"));
echo($data);
当我运行PHP文件时,它总是显示一个空页面。任何人都可以帮助我理解为什么它不起作用。
当我运行以下PHP代码时,它总是执行else条件。
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$data = json_decode(file_get_contents("php://input"));
echo($data);
}
else
{
echo "XXXXXX";
}
答案 0 :(得分:0)
我认为这不会起作用。
PHP脚本不是"听"和WebService一样。但是,在收到请求后,脚本会对其进行处理并尝试打印"结果是HTML,而不是Java。
答案 1 :(得分:0)
获取org.apache.http.client实例接收的响应主体,例如将其发送到System.out
CloseableHttpResponse response = httpClient.execute(request);
IOUtils.copy(response.getEntity().getContent(), System.out);
对于IOUtils使用import org.apache.commons.io.IOUtils;
如果你正在使用maven,依赖是
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
您很可能获得输出
Catchable fatal error<: Object of class stdClass could not be converted to string
因为echo($data)
无效。 json_decode(...)返回一个stdClass。
尝试
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// json_decode(..., true) will return an array instead of a stdClass
$data = json_decode(file_get_contents("php://input"), true);
var_export($data);
}
else
{
var_export($_SERVER['REQUEST_METHOD']);
}
代替。