2017-01-18 2 views
0

Ich versuche, Anfrage zu Ruhe api von curl zu senden, aber ich habe immer 404 Antwort. Wenn ich die gleiche Anfrage von PhpStorm mache, funktioniert meine Anfrage korrekt. Ich setze die gleichen Header im Rest-Client wie in curl. Was ich falsch mache? Im Folgenden meine PHP-Code und Screenshot der Rest-Client-KonfigurationAnfrage zur Ruhe api funktioniert nicht von php curl, aber funktioniert von PhpStorm Rest Client

$postfields = array(
     'SUBSCRIPTION'     => 'testlist', 
     "HTTP_REDIRECT"     => 'https://testsite.com', 
     "HTTP_REDIRECT_ERROR"   => 'https://testsite.com/error', 
     "email"       => '[email protected]', 
     "Sprache"      => 'DE' 
    ); 


    $uri = $uri . '?=' . http_build_query($postfields); // value of uri is http://web.mailingsystem.com/subscription/servlet?=SUBSCRIPTION=testlist&HTTP_REDIRECT=https%3A%2F%2Ftestsite.com%2F&HTTP_REDIRECT_ERROR=https%3A%2F%2Ftestsite.com%2Ferror&email=test%2B100A%40gmail.com&Sprache=DE 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $uri); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_VERBOSE, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
    curl_setopt($ch, CURLOPT_ENCODING, ""); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;from testshop;os:".PHP_OS.";)"); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); 

    $headers = [ 
     'Content-Length:' 
    ]; 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 


    $content = curl_exec($ch); 
    $error = curl_error($ch); 
    $response = curl_getinfo($ch); 
    curl_close($ch); 

rest client configuration

Antwort

0

zuerst ausgeschaltet sind, können Sie einen unvollständigen "Content-Length" Header senden. am wahrscheinlichsten behandelt der Zielserver dies als "content-length: 0", aber Sie sollten sich mit den Entwicklern der API in Verbindung setzen und ihnen sagen, sie zu reparieren, so dass sie eine 400 Bad Request Antwort zurückgibt, keine 404 Not Found Antwort, dann sollten Sie Ihre reparieren Code, so dass es den richtigen Header für die Inhaltslänge hat. Der beste Weg, dies zu tun, besteht darin, keinen Content-Length-Header überhaupt einzufügen, der Curl erzeugt das richtige für Sie (wenn Sie eine Anfrage haben)

Sekunde, scheint Ihr RestClient mit multipart/form-data Codierung , aber Ihr Curl-Code hat überhaupt keinen Anfragetext, die Daten befinden sich in der GET-URL, beheben das, also curl stimmt mit der RestClient-Sache mit CURLOPT_POSTFIELDS überein, wie curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($postfields));, und entfernt die Daten aus der URL. Es ist wahrscheinlich, weil Ihre URL falsch formatiert ist (enthält den post-Datenkörper), dass Sie den 404-Fehler

+0

thx für Ihre Hilfe erhalten. Ich musste beide Dinge nach deiner Beschreibung ändern und jetzt funktioniert es richtig. – Rudolf

Verwandte Themen