Приложение работает по-разному через php curl, чем прямой - PullRequest
0 голосов
/ 14 сентября 2011

Это, вероятно, не имеет никакого смысла, но именно поэтому я здесь. Я унаследовал веб-сайт, на котором я пытаюсь использовать больше «функций», например, Франкенштейну нужна вторая левая рука.

Часть приложения делает около 10 различных вызовов API для различных поставщиков услуг по всей стране, чтобы получить котировки. Это делается путем генерации нескольких разных URL-адресов и использования mcurl для их параллельного получения. Ни один из них не возвращает html, каждый запрашивает один API и обновляет базу данных.

Требуется несколько секунд, чтобы вращаться, пока он выполняет запросы API, но ничего в базе данных не обновляется. Я вижу в журналах каждый из запрошенных URL. Если я беру один из этих URL-адресов и помещаю его в адресную строку браузера, он работает просто отлично. API вызывается и база данных обновляется.

Подождите, это еще не все! Для отладки этих отдельных скриптов (поскольку они не имеют выходных данных) я использую fwrite (). Это работает, когда я использую URL в адресной строке браузера, но ничего не пишется, тогда все скрипты выполняются через mcurl. (multi-curl_execute (), если быть точным.)

Короче говоря, когда php использует curl для выполнения скрипта, он не будет обновлять базу данных mysql и не позволит мне открыть файл. Это работает, если я вырезал / вставил запрос GET из журналов в адресную строку браузера.

Теперь это программное обеспечение уже некоторое время находится в рабочем состоянии на работающем сайте и работает для них, как и ожидалось. Я занимаюсь разработкой на своей локальной машине, и это то, где она терпит неудачу. Просто должно быть что-то очень простое.

- Dave

1 Ответ

0 голосов
/ 14 сентября 2011

Это должно быть что-то в заголовках HTTP, которые отправляются с запросом.

Если у вас есть доступ к коду веб-сервисов (не упоминается в вашем посте), вы можете сброситьЗаголовки на той стороне, запишите его в файл или отправьте по электронной почте, и увидите различие между вызовом mcurl и вызовом браузера.

Массив $_<em>SERVER содержит их с именами, начинающимися с "HTTP ".

Другая идея заключается в том, чтобы подслушивать его на стороне клиента, откуда идет mcurl или браузер, хотя я, честно говоря, не уверен, как бы вы поступили так, не прослушивая сеть.

...