PHP SOAP [HTTP] Error Fetching http headers hiba

PHP SOAP [HTTP] Error Fetching http headers hiba
2022-10-10T16:34:37+02:00
2022-11-08T13:01:59+01:00
2022-11-17T15:00:46+01:00
Morderash
Sziasztok!

Adott egy SOAP 1.2-es protokollt használó webservice.

Állandóan erre a hibára a fut az általam használt kód:

"PHP Fatal error:  Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /valami.php"


Ezt a kódot használom:

$username = 'test'; $pass = 'pass'; $wssd = 'http://valami.hu?wsdl'; $wsse_header = new WsseAuthHeader($username, $pass); $client = new SoapClient($wssd, array( 'soap_version' => SOAP_1_2, 'trace' => true, 'connection_timeout' => 5000, 'cache_wsdl' => WSDL_CACHE_NONE, 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE, )); $client->__setSoapHeaders(array($wsse_header)); $params = array( 'param1' => '25', ); $response = $client->method1($params);
Amit próbáltam, hogy a default_socket_timeout PHP beállítást megváltoztattam, de az nem segített.  A szerver PHP 7.4-ez használ.

Köszi a segítséget.
Mutasd a teljes hozzászólást!

  • Kezdetnek wget/curl használatával le tudod tölteni a wsdl-t?
    Mutasd a teljes hozzászólást!
  • Igen, le tudom tölteni. 
    A __getFunctions-al le is tudom kérdezni az elérhető metódusokat, jön vissza válasz.
    Mutasd a teljes hozzászólást!
  • "PHP Fatal error:  Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /valami.php"

    Ugye itt nem '/valami.php' volt eredetileg, hanem mondjuk 'https://eeszt.hu/vitaminIgenylesService'?
    Mutasd a teljes hozzászólást!
  • Így néz ki a teljes hiba:

    PHP Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /web/teszt.php:43 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://valami.hu...', 'http://tempuri....', 2, 0) #1 /web/teszt.php (43): SoapClient->__call('method1', Array) #2 {main} thrown in /web/teszt.php on line 43
    Mutasd a teljes hozzászólást!
  • Esetleg az lehet probléma, hogy ez egy WCF webservice?
    Olvasgattam utána és úgy látom, hogy azt nem kezeli rendesen a PHP.
    Mutasd a teljes hozzászólást!
  • A SOAP szerintem sosem volt igazán jó szabvány, az xml-jeivel, névtereivel, ember által olvashatatlan wsdl fájljaival, kötelező HTTP fejléceivel, authentikációs megoldásaival. Nekem sok gondom volt már vele.

    Ami működni szokott, hogy az ember keres valahol a konkrét webes hívásra egy működő példát, aztán az annak megfelelő fejléceket, és tartalmat elküldi curl-lel (-lal?).
    Mutasd a teljes hozzászólást!
  • A curlel megpróbálkozok, a fejléceket a WSDL-ből bányásszam ki?
    Mutasd a teljes hozzászólást!
  • A curlel megpróbálkozok, a fejléceket a WSDL-ből bányásszam ki?

    A legjobb, ha találsz valami programot, ami meg tudja szólítani a WS-t. Aztán valahogy figyeled a forgalmat, pl. más nyelven írt program, wireshark, vagy böngésző ha abból hívja valami oldal. Van egy SoapUI nevű program is, ami nagy százalékban meg tudja szólítani a szervereket WSDL alapján. 

    Ha ez nem megy, akkor még a szolgáltatót lehet nyüstölni, hogy adjon valami anyagot. Nem tudom, milyen WS az.

    A lényeg az xml fájl, amit a kliens küld, illetve HTTP fejlécként a SOAPAction sor. Esetleg User-Agent, Authentication, Content-Type ami még számíthat. Általában ha ezeket le tudod másolni, nyert ügyed van.
    Mutasd a teljes hozzászólást!
  • Köszi a választ. Valószínű, hogy akkor a szolgáltató nyüstölése lesz mert a soap ui-val is hibát kapok:

    The message could not be processed. This is most likely because the action 'http://tempuri.org/' is incorrect or because the message contains an invalid or expired security context token or because there is a mismatch between bindings. The security context token would be invalid if the service aborted the channel due to inactivity. To prevent the service from aborting idle sessions prematurely increase the Receive timeout on the service endpoint's binding.


    Vagy megnézem javaban vagy c#-ban is, mertha sehol nem megy akkor gyanús, hogy náluk van a hiba.
    Mutasd a teljes hozzászólást!
  • Ha nem titkos a történet, akkor csatold fájlként a wsdl-t.
    Mutasd a teljes hozzászólást!
  • Az action hibás. Doi válaszában írta, hogy nem lehet jó a SOAPAction header. Ezzel kellene kezdened valamit, mert vannak olyan SOAP service-ek, amelyek e nélkül nem tudják feldolgozni a kérést, mert nem tudják, hogy melyik eseményt hívod a szerveren...
    Mutasd a teljes hozzászólást!
  • Ez még egész bőbeszédű, vannak WS-ek, amik simán csak üres üzentet adnak, ha valami nem jó. Az bájos, hogy több lehetőséget is mond a hibára. A tempuri tényleg nem action-nek tűnik.

    Izzadtságos lesz megtalálni a megoldást egy működő példa nélkül.
    Mutasd a teljes hozzászólást!
  • A tempuri.org után kitöröltem az action-t mert sajnos semmit nem oszthatok meg a webserviceről.
    Tehát az ott van így néz ki: Info

    Sajnos működő példát sem tudnak adni, csak egy c#-ban írt példa kódrészletet kaptam, ami kb annyi, hogy hogyan tudok soap client-t csinálni c#-ban, de talán azzal esetleg meg tudom nézni.
    Mutasd a teljes hozzászólást!
  • A soapaction egy karakterlanc, ami a hivanco funkciot tartalmazza altalaban. Abban nem kell semmilyen full url-t elhelyezni, plane nem tempuri-t…
    Mutasd a teljes hozzászólást!
  • A tempuri.org után kitöröltem az action-t mert sajnos semmit nem oszthatok meg a webserviceről

    Előfordul, hogy tempuri-t írnak, az valami olyasmit jelent, hogy lusták voltak a saját domain nevüket beírni, vagy azt akarják, hogy ugyanúgy menjen a teszt szerveren is. Ha van mögötte konkrét művelet, lehet, hogy nem az a gond.

    csak egy c#-ban írt példa kódrészletet kaptam

    Ha az annyira nem titkos, bevághatod ide a kényes részek kisatírozásával.

    Hát akkor itt a kihívás, telepítesz valami c# fejlesztőeszközt, bemásolod a programot, és kipróbálod. Aztán írsz nekik, hogy ezzel sem megy (). Ha aztán szerencséd van, akkor írnak, hogy egyrészt ők ezt a másik fejlesztőrendszert használják, másrészt a tesztprogramban ezt meg ezt át kell írni. Ha még nagyobb szerencséd van, másodjára (harmadjára) majd megy. Valahogy kinyered a programon keresztül a forgalmat, és tudod replikálni php-ben.
    Mutasd a teljes hozzászólást!
  • Vannak új fejlemények. A szolgáltató készített egy soap 1.1-et használó végpontot mert rájöttek, hogy az 1.2-es végpontot ők sem bírják php-ban működésre bírni.

    Most az a probléma, hogy a kérés elmegy de üres válasz érkezik hibaüzenet nélkül. Ezzel küzdünk jelenleg..
    Mutasd a teljes hozzászólást!
  • üres válasz érkezik hibaüzenet nélkül.

    Elindítottak valami szervert, csak nem tudják, hogyan működik. Vannak szerverek, amik a User-Agent hiányában nem válaszolnak.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd