Я работаю с реализацией cURL в PHP и использую curl_multi_init () и curl_multi_exec () для параллельного выполнения пакетов запросов. Я делал это некоторое время, и понимаю этот кусок.
Однако, тела запроса содержат подпись , которая рассчитывается с отметкой времени. С момента создания этой подписи у меня есть ограниченное время, чтобы сделать запрос, прежде чем сервер отклонит запрос, как только он будет сделан. В большинстве случаев это нормально. Однако в некоторых случаях мне нужно выполнять большие загрузки (5+ ГБ).
Если я выполняю пакетные запросы в пул из 100, 200, 1000, 20000 или чего-либо промежуточного и загружаю большие объемы данных на сервер, начальные запросы, которые выполняются, будут успешно выполнены. Однако последующие запросы не начнутся, пока не истечет время, указанное в подписи, поэтому сервер отклоняет эти запросы из-под контроля.
Поток тока, который я использую, выглядит примерно так:
- Делать какие-либо обработки заранее.
- Добавить еще не выполненные маркеры cURL в пакет.
- Пусть cURL обрабатывает выполнение всех запросов.
- Посмотрите на данные, которые вернулись, и проанализируйте все это.
Мне интересно найти способ выполнить функцию обратного вызова, которая может генерировать подпись по требованию и обновлять тело запроса в тот момент, когда PHP / cURL отправляется для выполнения этого конкретного запроса. Я знаю, что вы можете связать функцию обратного вызова с дескриптором cURL, который будет выполняться неоднократно, пока выполняется запрос, и у вас есть доступ к дескриптору cURL на протяжении всего пути.
Так что мой вопрос таков: есть ли способ настроить обратный вызов onBefore и / или onAfter для дескриптора cURL? Что-то, что может быть выполнено непосредственно перед тем, как cURL выполнит запрос, а затем что-то, что может быть выполнено сразу после того, как ответ вернется, чтобы данные ответа могли быть проанализированы.
Я бы хотел сделать что-то более ориентированное на события, например:
- Добавить еще не выполненный дескриптор cURL в пакет, назначив функцию обратного вызова для выполнения, когда cURL (не я) выполняет запрос (как до, так и после).
- Возьмите результаты пакетного запроса и сделайте с данными все, что я хочу.