Ответ на этот вопрос должен был состоять в том, чтобы «поместить каждый запрос в файл, по одному параметру в строке, и использовать -K/--config
для включения файла в командную строку». Это, безусловно, должно разрешить 300 запросов в одной команде curl без превышения ограничения на размер команды оболочки. (Под «запросом» здесь я подразумеваю «URL-адрес со связанными параметрами». Если вы хотите использовать только 300 URL-адресов без изменения каких-либо других параметров, вы можете легко сделать это, просто перечислив URL-адреса в командной строке, если они не отображаются ». t слишком длинный или иным образом в файле.)
К сожалению, это не работает. Я считаю, что это должно работать, и тот факт, что это не так, является ошибкой. Если вы укажете несколько опций -K
, и каждая из них ссылается на файл, который включает в себя один запрос и опцию --next
, то curl выполнит только первый и последний файл. Если вместо этого вы поместите параметры --next
в командной строке между параметрами -K
, все параметры запроса будут объединены, и, кроме того, curl будет жаловаться на отсутствующий URL.
Однако вы можно использовать опцию -K
, объединяя все 300 запросов и передавая их через stdin
, используя -K -
для чтения из stdin
. Чтобы проверить это, я создал файл, содержащий один запрос:
$ cat post-req
--next
-H "Connection: keep-alive"
-H "Pragma: no-cache"
-H "Cache-Control: no-cache"
-H "Accept: application/json, text/plain, */*"
-H "Sec-Fetch-Dest: empty"
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
-H "Content-Type: application/json"
-H "Origin: https://d.server.com"
-H "Sec-Fetch-Site: same-site"
-H "Sec-Fetch-Mode: cors"
-H "Referer: https://d.server.com/"
-H "Accept-Language: en-US,en;q=0.9,fa;q=0.8"
--data-binary "{\"isin\":\"IRO3TPEZ0001\",\"financeId\":1,\"quantity\":50000,\"price\":5400}"
--compressed
--url "http://localhost/foo"
, а затем настроил небольшой веб-сервер, который просто возвращает запрошенный путь, и вызвал curl с помощью:
for i in $(seq 300); do cat post-req; done | curl -K -
Действительно, все триста запросов пройдены.
Для чего бы это ни стоило, я сообщил об ошибке как https://github.com/curl/curl/issues/5120, и большое спасибо Даниэлю Стенбергу за невероятно отзывчивый подход к исправлению. менее чем за два дня. Так что, вероятно, проблема будет решена в следующем выпуске curl.