PHP cURL Content-Type ist nicht gesetzt

Lesezeit: 2 Minuten

Benutzer-Avatar
Mithrand1r

Ich habe einen einfachen Webdienst, mit dem ich mich verbinden möchte. Um welche zu posten XML, die auf der Webservice-Seite ordnungsgemäß durchgeführt werden, muss ich eine ordnungsgemäße Anfrage vorbereiten. ich benutze cURL dafür so:

try {
    $ch = curl_init();

    if (FALSE === $ch)
        throw new Exception('failed to initialize');
    
    curl_setopt($ch, CURLOPT_URL,"192.168.1.37");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/xml',
        'Connection: Keep-Alive'
    ));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($ch, CURLOPT_PROXY, '');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect:  "));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);

    $request=  curl_getinfo($ch);
    var_dump($request);

    $content = curl_exec($ch);

    if (false === $content) {
        throw new Exception(curl_error($ch), curl_errno($ch));
    }
} catch(Exception $e) {
    trigger_error(sprintf(
        'Curl failed with error #%d: %s',
        $e->getCode(), $e->getMessage()),E_USER_ERROR);
}

Alles sollte in Ordnung sein. Zuerst zeige ich den Anfragetext von an curl_getinfo($ch); und dann zeige ich die Antwort von $content Variable.

Die einzige Einschränkung für die an den Server zu sendende Anfrage ist Content-Type Header – es MUSS sein application/xml Andernfalls antwortet der Server mit einem Fehler (Es ist nicht meine Idee und ich kann nichts dagegen tun).

Hier ist die Ausgabeanforderung:

array(21) { ["url"]=> string(68) "192.168.1.37" ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int(0) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0) ["namelookup_time"]=> float(0) ["connect_time"]=> float(0) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(-1) ["starttransfer_time"]=> float(0) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } }

und Antwort ist HTTP 400 Bad Request

Was ich daran erkennen kann ist ["content_type"]=> NULL aber ich setze diese Variable in meinem PHP-Code …

Kann mir jemand sagen, was mir fehlt?

  • Versuchen Sie, diesen Beitrag zu sehen: http://stackoverflow.com/questions/9823810/set-http-request-content-type

    – Luca Guida

    29. März 2016 um 9:12 Uhr

Benutzer-Avatar
Legionär

Sie setzen HTTP_HEADER zweimal:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                            'Content-Type: application/xml',
                                            'Connection: Keep-Alive'
                                            ));

curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect:  "));

Ich denke, das ist das Problem. Bei der zweiten Einstellung löschen Sie die erste Einstellung.

  • Natürlich war es das! Ich kann es nicht glauben, das war so ein dummer Fehler. Danke Legionär!

    – Mithrand1r

    28. Oktober 2013 um 13:52 Uhr

  • Ugh ein Problem mit Copy-Paste-Code. Ich hatte genau die gleiche Leitung, die genau das gleiche Problem verursachte. Hochgestimmt

    – Aufgehende Sonne

    29. Oktober 2015 um 22:18 Uhr

1176580cookie-checkPHP cURL Content-Type ist nicht gesetzt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy