2011-09-13 4 views
0

Cela n'a probablement pas de sens, mais c'est pourquoi je suis ici. J'ai hérité d'un site Web que j'essaie de plus de "fonctionnalités" comme Frankenstein a besoin d'un deuxième bras gauche.Application fonctionne différemment via curl de php que direct

Une partie de l'application fait environ 10 appels API différents à divers fournisseurs de services à travers le pays pour obtenir des devis. Il le fait en générant plusieurs URL différentes et en utilisant mcurl pour les obtenir en parallèle. Aucun d'entre eux ne renvoie de code HTML, ils interrogent chacun une seule API et mettent à jour la base de données.

Il faut quelques secondes pour s'exécuter, tournant ses roues à mesure qu'il effectue les requêtes API, mais rien dans la base de données n'est mis à jour. Je peux voir dans les journaux chacune des URL demandées. Si je prends l'une de ces URL, et que je la mets dans la barre d'adresse d'un navigateur, cela fonctionne très bien. L'API est appelée et la base de données est mise à jour.

Attendez, il n'y a plus! Afin de déboguer ces scripts individuels (puisqu'ils n'ont pas de sortie) j'utilise fwrite(). Cela fonctionne quand j'utilise une URL dans la barre d'adresse d'un navigateur, mais rien n'est écrit alors tous les scripts sont exécutés via mcurl. (multi-curl_execute() pour être précis.)

En résumé, quand php utilise curl pour exécuter un script, il ne mettra pas à jour la base de données mysql, et il ne me permettra pas de rouvrir un fichier. Cela fonctionne si je coupe/colle la requête GET des journaux dans la barre d'adresse d'un navigateur.

Maintenant, ce logiciel a été en production pendant un certain temps sur le site en direct, et travaille pour eux comme prévu. Je fais du développement sur ma machine locale, et c'est là que ça échoue. Ça doit juste être quelque chose de très simple.

--Dave

Répondre

0

Il doit être quelque chose dans les en-têtes HTTP qui sont envoyés à la demande.

Si vous avez accès au code des services Web (n'est pas mentionné dans votre message), vous pouvez vider les en-têtes de ce côté, l'écrire dans un fichier ou l'envoyer par courrier électronique et voir la distinction entre le mcurl appel et l'appel du navigateur.

Le tableau $_SERVER contient les noms précédés de "HTTP". Une autre idée l'écoute du côté client, d'où proviennent mcurl ou le navigateur, même si je ne suis franchement pas sûr de la façon de le faire sans renifler le réseau.

+0

J'ai regardé dans la session et d'autres biscuits, mais la seule information là est également envoyée dans l'URL elle-même. Il n'y a pas de vérification de variable de navigateur ou $ _SERVER. Je pense que les appels API sont bons, c'est les URL locales séparées qui refusent de fonctionner correctement. –