Невозможно получить запрос JSON POST в PHP

java php json post

633 просмотра

2 ответа

19 Репутация автора

Я передаю объект JOSN из Java в PHP. Я использую JDK 1,8 анг сервер 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";
    } 
Автор: Pritam Источник Размещён: 29.02.2016 03:48

Ответы (2)


0 плюса

136 Репутация автора

Я не думаю, что это будет работать.

PHP-скрипт не "слушает", как WebService. Однако после получения запроса скрипт обрабатывает его и пытается «напечатать» результат в HTML, а не в Java.

Автор: Alexis Ochoa Размещён: 29.02.2016 03:59

0 плюса

85257 Репутация автора

Извлеките тело ответа, которое получает ваш экземпляр 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']);
}

вместо.

Автор: VolkerK Размещён: 29.02.2016 05:21
Вопросы из категории :
32x32