원격 서버로 데이터를 보내기 위해 컬 명령을 실행하고 있습니다. 명령의 일부는 --trace-ascii
컬의 전체 출력을 보여줍니다.
게시된 데이터만 가져오도록 이 출력을 grep하려고 합니다.
다음은 출력의 예입니다. x-www-form-urlencoded
첫 번째 발생부터 모든 것을 캡처하고 싶습니다 .<= Recv SSL data
009c: Content-Length: 89
00b1: Content-Type: application/x-www-form-urlencoded
00e2:
=> Send data, 89 bytes (0059)
0000: site=test&user=admin&description=Loca
0040: l system&location=NWE&site_id=67876&tel
0080: ephone=xxxxxx
== Info: upload completely sent off: 89 out of 89 bytes
<= Recv SSL data, 5 bytes (0x5)
0000: ....J
<= Recv SSL data, 1 bytes (0x1)
0000: .
== Info: TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
<= Recv SSL data, 57 bytes (0x10)
내가 사용하는 명령은 다음과 같습니다.
echo $OUTPUT | grep -Po '(?<=(x-www-form-urlencoded)).*(?= <= Recv SSL data)'
올바른 위치에서 시작하는 데이터를 반환하지만 다음을 포함하는 모든 행도 포함합니다.<= Recv SSL data
내 생각엔:
x-www-form-urlencoded
00e2:
=> Send data, 89 bytes (0059)
0000: site=test&user=admin&description=Loca
0040: l system&location=NWE&site_id=67876&tel
0080: ephone=xxxxxx
== Info: upload completely sent off: 89 out of 89 bytes
어떻게 해야 하나요?
감사해요
고쳐 쓰다. 다음은 사용된 컬 명령의 예입니다.
OUTPUT=`curl -u user:passwprd -s \
-d "site=test" \
-d "user=admin" \
-d "description=Local system" \
-d "location=NWE" \
-d "site_id=67876" \
-d "telephone=xxxxxx" \
--trace-ascii - -XPOST "https://x.x.x.x/test.php"`
게시된 데이터를 캡처하고 싶습니다.
답변1
일반적인 질문은 다음과 같습니다.탐욕스러운 수량자. 그것을 a로 .*?
교체하면 .*
더 잘 작동합니다.
echo $OUTPUT | grep -Po '(?<=(x-www-form-urlencoded)).*?(?=<= Recv SSL data)'
그러나 나는 당신의 grep이 당신에게 그렇게 잘 작동했다는 것에 놀랐습니다. grep은 한 줄씩 작동하기 때문에 어떤 것과도 일치하지 않을 것으로 예상됩니다.