Błąd przekazania żądania POST przez file_get_contents()

0

Hej. Dostałem opierdziel od dzeka że nie w tym wątku co trzeba umieściłem swoje pytanie, a więc kieruję je tutaj :)

Wywołuję sobie funkcję, która przekazuje parametry ($args) w kontekście strumienia do skryptu na serwerze. Niestety za nic nie mogę odczytać przekazanych danych po stronie serwera - polecenie var_dump($_POST) zwraca mi empty

public function jsonResponse($action, $args = array()) {
        
        $data = array(
            "action" => $action,
            "args" => $args,
        );

        require_once dirname(__FILE__) . "/Crypt.php";
        $data_json = json_encode($data); // Koduję dane do formatu json,
        
        echo $data_json.'<br />';
        $data_encrypted = Crypt::encrypt_hex($data_json); // Szyfruję to
        echo $data_json.'<br />';
        $context = stream_context_create(array( // Tworzę kontekst, określając typ strumienia: application/json
            "http" => array(
                "method" => "POST",
                "header" => "Content-Type: application/json",
                "content" => array('content' => $data_json),
            )
        ));

        $api = 'http://localhost:88/PhpProject1/navi_api/Serwer.php';

        $response = file_get_contents($api, FALSE, $context);
         print_r($response); // TU MA WYŚWIETLIĆ ZAWARTOŚĆ STRONY Z URL'A
        $response = Crypt::decrypt_hex($response);
        $response = json_decode($response, TRUE);
        return $response;
    }

Po stronie "serwera" jest to zwykłe:

var_dump($_POST);

Czy można curl'em? Można, ale też nie działa. Widzi ktoś błąd?? Byłbym wdzięczny za pomoc.

0

Skoro chcesz tak wysyłać POSTa, to taki header musisz dać (z cURLem powinno pójść ok z application/json):

"header" => "Content-type: application/x-www-form-urlencoded"

a content nie ma prawa być tablicą, więc możesz zrobić tak:

"content" => 'content='.$data_json,

Btw. przekazywanie przez referencję w encrypt_hex, jest kiepskim pomysłem i wprowadza więcej zamieszania niż pożytku.

0

Działa! Dzięki. Szukając rozwiązań na innych forach spostrzegłem że ludzie dają urlencoded zamiast json.

Co do tego szyfrowania - masz na myśli to, żeby nie wywoływać funkcji statycznej ale żeby utworzyć obiekt klasy Crypt?

0

Akurat na ten helper można przymknąć oko i może być jako static. Ale skoro masz w kodzie

$data_encrypted = Crypt::encrypt_hex($data_json);

i później nigdzie w kodzie nie używasz zmiennej $data_encrypted

, zakładam, że zmienna <code class="php">$data_json

jest przekazywana przez referencję, co nie ma uzasadnienia w takim przypadku i wprowadza zamieszanie w kodzie. Jak już się upierasz przekazywaniu przez referencję, to zrób to chociaż tak Crypt::encrypt_hex($data_json);

, szybciej ktoś wpadnie na pomysł,że przekazujesz to przez referencję, skoro nie przypisujesz tego do żadnej zmiennej.

Ale to taka uwaga przy okazji tylko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1