Таким образом, суть в том, что мне нужно отправить XML-запрос данных на страницу шлюза, чтобы получить ответ XML, который будет обрабатываться позже, может быть где угодно от 3-60 запросов к этой веб-службе, я, к сожалению, должен запустить простой цикл прямо сейчас и делать их по одному. На стороне ответа мне понадобится только 1 (или максимум 5) строк в ответе, строка 2 – это первая строка, в которой мне нужны данные изображения. Поэтому мне хотелось бы выбрать, какие строки я читаю, если это вообще возможно.
Я создал простую функцию «Чтение», как я уже сказал, из базового цикла, вот код, который я сейчас использую, и хотел бы пересмотреть.
$ part1 = 'XML Beginning'; $ part2 = XML End '; $ posts = array (0 => 'SC-010052214', 1 => 'SC-000032972', 2 => 'SC-012535460', 3 => 'SC-011257289', 4 => 'SC-010134078') ; $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, 'http://example.com/index.php'); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER => 1); curl_setopt ($ ch, CURLOPT_POST, 1); $ count = count ($ posts); for ($ i = 0; $ i <$ count; $ i ++) { curl_setopt ($ ch, CURLOPT_POSTFIELDS, "payload = $ part1 {$ posts [$ i]} $ part2"); $ return [] = curl_exec ($ ch); } curl_close ($ ch); print_r ($ возврата);
Ограничения: Я не могу использовать post = $ data0 & post = $ data1 & post = $ data3, к сожалению, поэтому мне нужно лучшее решение. Помимо этого, я хотел бы посмотреть, какие улучшения могут быть сделаны здесь.
Возможно, http://php.net/manual/en/function.curl-multi-init.php поможет вам
Из-за ограничений в быстром ответе,
<? PHP
функция m_curl ($ input) {
// компилировать запросы для используемых мест
foreach ($ input ['content'] как $ pos => $ item) {
$ query = '<childDetailQuery> <запрос> <запрос-замена>';
$ query. = "<item_number> {$ item} </ item_number>";
$ query. = (isset ($ input ['story']) && $ input ['story']! = NULL)
? "<Story_type>". $ Вход [ 'история']. "</ Story_type>"
: '<story_type> SHORT </ story_type>';
$ query. = (isset ($ input ['party']) && $ input ['party']! = NULL)
? "<Party_number>". $ Вход [ 'сторона']. "</ Party_number>"
: '';
$ query. = "</ query-replacement> <latency-tolerance> NONE </ latency-tolerance>";
$ query. = '</ request> </ childDetailQuery>';
$ query [] = $ query;
снята с охраны ($ запроса);
}
// убедитесь, что окно катания не больше, чем число URL-адресов
$ limit = 10;
$ limit = (sizeof ($ queries) <$ limit)? sizeof ($ queries): $ limit;
$ master = curl_multi_init ();
$ curl_arr = array ();
// добавьте дополнительные параметры завитка
$ std_options = array (
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_MAXREDIRS => 0,
);
$ options = ($ coptions)? ($ std_options + $ coptions): $ std_options;
echo $ input ['location'];
// запускаем первую партию запросов
for ($ i = 0; $ i <$ limit; $ i ++) {
$ ch = curl_init ();
$ options [CURLOPT_POSTFIELDS] = "payload =". $ query [$ i];
curl_setopt_array ($ ч, $ вариантов);
curl_multi_add_handle ($ master, $ ch);
}
делать {
while (($ execrun = curl_multi_exec ($ master, $ running)) == CURLM_CALL_MULTI_PERFORM);
if ($ execrun! = CURLM_OK) {
echo 'Curl Error'; ломать;
}
// запрос был только что завершен - узнать, какой из них
while ($ done = curl_multi_info_read ($ master)) {
$ info = curl_getinfo ($ done ['handle']);
if ($ info ['http_code'] == 200) {
$ output = curl_multi_getcontent ($ done ['handle']);
// запрос успешно. выход процесса с использованием функции обратного вызова.
parse_returns ($ выход);
// запускаем новый запрос (важно сделать это, прежде чем удалять старый)
$ ch = curl_init ();
$ options [CURLOPT_POSTFIELDS] = "payload =". $ query [$ i ++]; // приращение i
curl_setopt_array ($ ч, $ вариантов);
curl_multi_add_handle ($ master, $ ch);
// удаляем только что завершенный
curl_multi_remove_handle ($ master, $ done ['handle']);
} else {
echo 'Не удалось:'; var_dump ($ информация);
echo 'С параметрами:'; var_dump ($ вариантов);
// запрос не выполнен. добавьте обработку ошибок.
}
}
} while ($ running);
curl_multi_close ($ мастер);
return false;
}
функция parse_returns ($ data) {
print_r ($ данных);
}
// задать номера запросов
$ data = array (
0 => 'SC-010052214',
1 => 'SC-000032972',
2 => 'SC-012535460',
3 => 'SC-011257289',
4 => 'SC-010134078'
);
// набор опций array
$ options = array (
'location' => 'http://ibudev.wvus.org/websvc/actions/wvsMessageRouter.php',
'readline' => 2,
'coptions' => NULL,
'content' => $ data,
'story' => 'FULL',
'party' => NULL,
);
m_curl ($ вариантов);
?>