Przeszukałem cały stackoverflow i Google dla rozwiązania mojego problemu.Zend_HTTP_Client Nie pozwól mi POST żadnych danych
Stworzyłem dwa projekty z Zend Framework - Project1
i Project2
- i chcę wdrożyć usługi internetowe na jednym z nich. Chodzi o to, aby wysłać ciąg JSON do Project1
i odebrać JSON ze wszystkimi szczegółami związanymi z tą zmienną za pomocą POST. Teraz stworzyliśmy TestController na Project2
:
public function indexAction(){
$uri = 'http://project1.com/WebService/data';
$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Curl',
'curloptions' => array(CURLOPT_FOLLOWLOCATION => true),
);
$client = new Zend_Http_Client($uri, $config);
$request = $client->request('POST');
print_r($request->getBody());
exit();
}
Powyższy kod działa. Odczytuje on dataAction
ze sterownika Project1
i podaje mi wynik tego, co jest echo. Ale gdy próbuję to:
public function indexAction(){
$uri = 'http://project1.com/WebService/data';
$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Curl',
'curloptions' => array(CURLOPT_FOLLOWLOCATION => true),
);
$client = new Zend_Http_Client($uri, $config);
$data = array(
'userID' => 'TEST TEST',
'value' => 1,
'description' => 'ABCDEFG',
);
$request = $client->request('POST');
$json = json_encode($data);
$client->setRawData($json, 'application/json')->request('POST');
exit();
}
A po stronie serwera, gdy próbuję wyświetlanie wewnątrz dataAction
:
public function dataAction(){
var_dump($this->getRequest()->getParam('var-name'));
var_dump($_POST);
die();
}
uzyskać moc to: NULL array (0) {} .... Otrzymuję ten sam wynik, gdy próbuję go po stronie klienta. Wspomnę też ... Próbowałem również otworzyć plik wejściowy php: //, ale dostałem pusty ciąg ...
Czego mi brakuje? Frustrowałem się, szukając go od rana, ale nie miałem rozwiązania.
Z góry dziękuję za odpowiedź.
Cieszę się, że mam szybką odpowiedź. Jak już powiedziałeś, próbowałem użyć tego kodu, ale dostałem NULL z var_dump ($ json) i bool (false) z var_dump ($ post); i zgadzam się z tym, że twój post json nie jest analizowany. Ale kiedy próbuję to: $ client-> setRawData ($ test, 'String') -> request ('POST'); gdzie test jest ciągiem nadal daje mi tylko NULL? – 1291
Nie wiem, dlaczego to nie zadziałało. Dodałem pełny kod dla obu akcji kontrolera w kodzie. Jest to głównie kopia/wklej tego, co masz na prośbę. Mam nadzieję, że możesz to sprawić. Upewnij się, że używasz najnowszej wersji ZF 1.12.0. Testowałem w wersji 1.11.13 i działało również z tą wersją. – drew010
Najwyraźniej nie wysyłałem danych poprawnie ... to się zmieniło: $ data = array ('num' => '1234'); $ dataString = ""; ... Po stronie serwera zrobiłem to: $ this-> request-> getParam ('num') $ this-> json-> sendData ($ data); .. i teraz działa :)! Dzięki za pomoc! Doceniam to! – 1291