web-dev-qa-db-fra.com

PHP - Type de contenu non spécifié en supposant que l'application / x-www-form-urlencoded

Depuis 2 jours je rencontre des problèmes avec mon script PHP sur mon serveur. Je n'ai rien changé et du coup ça n'a plus marché.

Voici le code:

$query = http_build_query($data);
$options = array(
    'http' => array(
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n".
                    "Content-Length: ".strlen($query)."\r\n",     
        'method'  => "POST",
        'content' => $query,
    ),
);
$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n",'method'  => 'POST',
        'content' => http_build_query($data),));
$contexts = stream_context_create($opts);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $contexts, -1, 40000);

Je reçois ces messages d'erreur:

Remarque: file_get_contents (): type de contenu non spécifié en supposant que l'application/x-www-form-url est codé dans

Avertissement: file_get_contents ( https://mobile.dsbcontrol.de ): échec d'ouverture du flux: échec de la requête HTTP! Erreur de serveur interne HTTP/1.1 500 dans

Mais lorsque j'essaie le script localement, il fonctionne parfaitement.

19
hannsch

Vous passez $contexts À file_get_contents() et qui ne contient que l'en-tête User-Agent Dans le tableau $opts. Tous les autres en-têtes et options sont dans le tableau $options Que vous ajoutez à $context Mais que vous n'utilisez pas. Essayer:

$query = http_build_query($data);
$options = array(
    'http' => array(
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n".
                    "Content-Length: ".strlen($query)."\r\n".
                    "User-Agent:MyAgent/1.0\r\n",
        'method'  => "POST",
        'content' => $query,
    ),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context, -1, 40000);
31
AbraCadaver

Alors que les réponses existantes ne fonctionnaient pas pour moi, j'ai réussi à résoudre le problème comme ceci:

Le PHP Manual dit que params doit être un tableau associatif au format $arr['parameter'] = $value. Reportez-vous aux paramètres de contexte pour une liste des paramètres de flux standard.

 
 $ header = array (
 "Content-Type: application/x-www-form-urlencoded", 
 "Content-Length:" .strlen ( $ postdata) 
); 
 
 
 $ packet ['method'] = "POST"; 
 $ packet ['header'] = = implode ("\ r\n", $ header); 
 $ packet ['content'] = $ postdata; 
 
 $ transmis_data = array ('http' => $ paquet); 
 $ context = stream_context_create ($ transmis_data); 
 
0
Misaq