web-dev-qa-db-fra.com

PHP cURL Content-Type n'est pas défini

J'ai un service Web simple avec lequel je voudrais me connecter. Afin de publier un XML, qui sera correctement exécuté du côté du service Web, je dois préparer une demande appropriée. J'utilise cURL pour ceci comme ça:

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);

}

Tout devrait bien se passer. D'abord, j'affiche le corps de la demande à partir de curl_getinfo($ch); puis j'affiche la réponse de la variable $content.

La seule restriction pour l'envoi d'une demande au serveur est l'en-tête Content-Type - il DOIT être application/xml Sinon le serveur répondra avec une erreur (ce n'est pas mon idée et je ne peux rien y faire) )

Voici la demande de sortie:

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) { } }

et la réponse est HTTP 400 Bad Request

Ce que je peux voir de cela est ["content_type"]=> NULL Mais j'ai défini cette variable dans mon PHP ...

Quelqu'un peut-il me dire ce qui me manque?

27
Mithrand1r

Vous définissez HTTP_HEADER deux fois:

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

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

Je suppose que c'est le problème. La deuxième fois que vous le définissez, vous supprimez le premier paramètre.

53
Legionar