2016-02-29 63 views
1

我正在将Java中的JOSN对象传递给PHP。我正在使用jdk 1.8 ang WAMP服务器。 以下是Java代码。无法接收PHP中的JSON POST请求

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

你是否已经使用调试器来确保所有变量都已填充? – Ascalonian

+0

@Ascalonian我可以在Java中打印JSON对象。我试图连接到不正确的URL来检查程序是否工作。它产生了一个例外。其中显示连接已成功建立。如果它接收到POST请求,我也在PHP端进行了测试。它无法接收POST请求。 – Pritam

回答

0

我不认为这会奏效。

PHP脚本不像WebService那样“监听”。但是,接收到请求后,脚本会对其进行处理,并尝试将结果“打印”为HTML,而不是Java。

+0

是的,我希望脚本能够在浏览器中接收,处理和打印结果。可能是PHP或HTML。如果你能向我建议更好的方式,那就太好了。 – Pritam

+0

直接,你不能。 您可以将请求写入文本文件或数据库,然后从PHP中进行搜索。请注意,许多请求将是数据库中的许多文本文件或记录。 '<?php $ file = fopen(“request.txt”,“w”); fwrite($ file,$ data); fclose($ file); ?> 在另一个文件中, '<?php $ file = fopen(“request.txt”,“r”); while(!feof($ file)){ echo fgets($ file)。 “
”; } fclose($ file); ?>' –

+0

可以使用JSON发布请求。请检查这篇文章http://stackoverflow.com/questions/14983521/send-json-from-java-to-php-through-post – Pritam

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']); 
} 

改为。

+0

非常感谢。这工作..! – Pritam

+0

如果我需要从JSON对象提取数据并将其传递给PHP函数,该怎么办? – Pritam

+0

每个问题请一个问题。这不是像Stackoverflow计费您创建一个问题.... – VolkerK