n 줄의 txt 파일에서 n 컬 POST 스크립트를 작성하고 HTTP 요청 응답 "200 OK"의 출력을 조건부로 저장합니다.

n 줄의 txt 파일에서 n 컬 POST 스크립트를 작성하고 HTTP 요청 응답 "200 OK"의 출력을 조건부로 저장합니다.

이 cURL "POST" 요청을 고려하면 다음과 같습니다.

$ curl -i -s -k -X $'POST' \
-H $'Host: api.host.it' \
-H $'Content-Length: 205' \
-H $'Sec-Ch-Ua: \"Chromium\";v=\"93\", \" Not;A Brand\";v=\"99\"' \
-H $'Messageid: 9d6dd58d2df24d0aa410245a' \
-H $'Sessionid: ada9e560ed204e85a25e5475' \
-H $'Devicetype: ANDROID' \
-H $'Interactiondate-Date: 2021-09-27' \
-H $'Interactiondate-Time: 20:32:37.758' \
-H $'Sec-Ch-Ua-Mobile: ?0' \
-H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36' \
-H $'Content-Type: application/json;charset=UTF-8' \
-H $'Accept: application/json' \
-H $'Sourcesystem: WEB' \
-H $'Businessid: bbc0a98dc23a4a84968c42e4' \
-H $'Channel: HOSTWEBCO' \
-H $'Transactionid: 3F941666A8414D3C874AC77B' \
-H $'Sec-Ch-Ua-Platform: \"Linux\"' -H $'Origin: https://www.host.com' \
-H $'Sec-Fetch-Site: same-site' \
-H $'Sec-Fetch-Mode: cors' \
-H $'Sec-Fetch-Dest: empty' \
-H $'Referer: https://www.host.com/' \
-H $'Accept-Encoding: gzip, deflate' \
-H $'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8' \
-H $'Connection: close' \
--data-binary $'{\"mount\":25,
                 \"Method\":\"SA\",
                 \"redirectUrlKo\":\"https://www.host.com/scarica?esito=KO\",
                 \"redirectUrlOk\":\"https://www.host.com/scarica?esito=OK\",
                 \"toMsisdn\":\"PARAMETER\",
                 \"txReqDescription\":\"scarica Online\"}' \
$'https://api.host.com/api/charge/public/init'

파일의 각 줄에 대해 cURL 명령을 실행하는 Bash 또는 Python 스크립트를 작성하고 numbers.txt각 줄을 cURL 옵션 내에 표시된 PARAMETER 자리 표시자에 대한 입력으로 가져와야 합니다 --data-binary. 각 요청 후에는 curlHTTP 요청 응답 코드가 "200 OK"인 경우에만 출력이 파일로 전달되어야 합니다.output.txt

cURL이 파일 입력을 허용한다는 것을 알고 있지만 [email protected]그 앞에 다른 필드가 있어서 작동하지 않습니다.

답변1

아래 쉘 스크립트에서는 3가지 요구 사항을 충족합니다.

  • PARAMETER파일에서 연속된 값을 읽습니다 numbers.txt. 여기서 값은 한 줄에 하나의 값으로 나열됩니다.
  • 검색된 각 값에 대해 PARAMETERHTTP 서버 요청이 코드 "200"을 반환하는지 테스트합니다.
  • output.txt제공된 HTTP 반환 코드 "200 OK" 에 cURL의 연속 출력을 추가합니다.

따옴표를 인용하고 이스케이프 처리하는 한 구문을 수정하지 않았습니다. 이는 사용 사례일 수도 있고 귀하의 환경에 특정한 것일 수도 있습니다. 테스트할 수는 없습니다. 다음 쉘 스크립트를 파일에 넣고 터미널 cmd :: myscript.sh를 사용하여 파일을 실행 가능하게 만듭니다 .chmod ug+x myscript.sh

$ cat myscript.sh

[산출]

#!/usr/bin/sh    
output="$(/usr/bin/date +%Y%m%d_%H%M%S)""_output.txt"
while read -r dyn_param; do
    set -- -isk \
    -X 'POST' \
    -H 'Host: api.host.it' \
    -H 'Content-Length: 205' \
    -H 'Sec-Ch-Ua: \"Chromium\";v=\"93\", \" Not;A Brand\";v=\"99\"' \
    -H 'Messageid: 9d6dd58d2df24d0aa410245a' \
    -H 'Sessionid: ada9e560ed204e85a25e5475' \
    -H 'Devicetype: ANDROID' \
    -H 'Interactiondate-Date: 2021-09-27' \
    -H 'Interactiondate-Time: 20:32:37.758' \
    -H 'Sec-Ch-Ua-Mobile: ?0' \
    -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36' \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -H 'Accept: application/json' \
    -H 'Sourcesystem: WEB' \
    -H 'Businessid: bbc0a98dc23a4a84968c42e4' \
    -H 'Channel: HOSTWEBCO' \
    -H 'Transactionid: 3F941666A8414D3C874AC77B' \
    -H 'Sec-Ch-Ua-Platform: \"Linux\"' \
    -H 'Origin: https://www.host.com' \
    -H 'Sec-Fetch-Site: same-site' \
    -H 'Sec-Fetch-Mode: cors' \
    -H 'Sec-Fetch-Dest: empty' \
    -H 'Referer: https://www.host.com/' \
    -H 'Accept-Encoding: gzip, deflate' \
    -H 'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8' \
    -H 'Connection: close'
    
    set -- "$@" \
--data-binary '{"mount":25,"Method":"SA","redirectUrlKo":"https://www.host.com/ricarica?esito=KO","redirectUrlOk":"https://www.host.com/ricarica?esito=OK","toMsisdn":'\""$dyn_param"\"',"txReqDescription":"scarica Online"}'

 httpcode=$(curl -o curl_tmp_dump -w "%{http_code}" "$@" https://api.host.com/api/recharge/public/init 2>/dev/null)
 [ "$httpcode" -eq 200 ] && \cat curl_tmp_dump >> "$output"
\rm -f curl_tmp_dump

done < numbers.txt

exit 0

관련 정보