Comment puis-je arrêter cURL à partir de l'utilisation de 100 Continuer?

Donc, longue histoire courte, j'ai une application AJAX qui utilise les API Web MVC en tant que back-end. Le client a cependant des appels à partir d'un domaine différent et utilise PHP fichier de proxy pour contourner la croix-demande de domaine questions.

Cependant, en utilisant le PHP proxy, Web API répond à certaines demandes avec un 100 Continue en-tête HTTP et toutes les demandes qui obtenir ce retour prendre trop de temps pour le terminer (nous parlons à 2 minutes environ) et peut également renvoyer à une non-réponse valide.

Ce semble être un problème connu avec cURL et la solution de contournement est souvent cité comme l'insertion de la ligne ci-dessous pour supprimer le fait de s'attendre: 100-tête dans la demande cURL

Malheureusement, la solution semble être hors de portée pour moi:

$headers = getallheaders();
$headers_new = "";
foreach($headers as $title => $body) {
    $headers_new[] = $title.": ".$body;
}
//$headers_new[] = 'Expect:';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_new);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:') );

Ce code fonctionne mais supprime tous les autres en-têtes (ce qui n'est pas viable pour moi comme je suis à l'aide de HTTP basic auth les en-têtes d'authentification avec l'API).
Vous pouvez également remarquer j'ai essayé d'ajouter le Expect: à l'existant, en-têtes, mais cela ne m'aide pas non plus.

Comment puis-je maintenir les en-têtes, mais aussi de prévenir cURL de s'attendre à une 100 de continuer?

  • getallheaders() ne fait pas ce que vous semblez penser qu'il fait. Il récupère les en-têtes de demande qui ont été envoyés, et non les en-têtes de requête que curl utilisation. Vous devriez seulement besoin de la curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:') ); ligne - supprimer tout le reste du code ci-dessus et cela devrait fonctionner.
  • DaveRandom - en fait, c'est exactement l'intention - si je prends les en-têtes de requête et de les transmettre sur les API (ils comprennent les HTTP Auth genre de trucs). Le problème est que cURL ajouter le Expect: 100 de ces en-têtes.
  • Se référant à ceci pourriez-vous essayer d'ajouter curl_setopt($ch, CURLOPT_FAILONERROR, TRUE);? Espérons que cette aide.
  • Problème est, ce n'est pas classée comme une erreur - il n'est en fait pas défaut!
  • Même les auteurs de curl pense que ce comportement (de libcurl) n'est pas bon.
  • Voir aussi stackoverflow.com/questions/49670008/...

InformationsquelleAutor jmillar | 2013-01-04