curl 명령으로 URL을 인코딩하는 방법은 무엇입니까?


107

쿼리 매개 변수에 공간이있는 URL이 있습니다. 컬에서 이것을 사용하고 싶습니다.

curl -G "http://localhost:30001/data?zip=47401&utc_begin=2013-8-1 00:00:00&utc_end=2013-8-2 00:00:00&country_code=USA"

어느 것이나

Malformed Request-Line

내 이해에 따라 o / p는 쿼리 매개 변수에 존재하는 공간 때문입니다.

curl 명령에 URL을 제공하기 전에 자동으로 URL을 인코딩 할 수 있습니까?

답변:


170

curl내부적으로 URL 인코딩을 지원합니다 --data-urlencode:

$ curl -G -v "http://localhost:30001/data" --data-urlencode "msg=hello world" --data-urlencode "msg2=hello world2"

-G 또한 데이터를 URL에 추가해야합니다.

추적 헤더

> GET /data?msg=hello%20world&msg2=hello%20world2 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu)
> Host: localhost
> Accept: */*

만약에 msg = '='?
Aurélien Ooms

curl doc에서 : 이름 부분 (이 경우 msg)은 이미 URL 인코딩되어 있어야합니다. 또한 --request DELETE와 같은 것을 지정할 수 있으며 실제로 GET 대신 delete 메소드입니다. 주문이 중요한지 확실하지 않습니다.
Federico

@damphat 요청에 두 개의 매개 변수가 있으면 어떻게됩니까 "msg1=Hello&msg2=World"? 이것은 &서버로 전송하는 잘못된 것을 의미하는 매개 변수 사이 를 인코딩 합니다.
Ganesh Satpute

10
@GaneshSatpute : --data-urlencode각 키-값 쌍마다 하나씩 여러 개의 매개 변수를 사용하십시오 .
Martijn Pieters

@MartijnPieters 예. 작동합니다. 답변 주셔서 감사합니다
Ganesh Satpute

7
 curl -G "$( echo "$URL" | sed 's/ /%20/g' )"

$URL번역하려는 URL은 어디에 있습니까 ?

URL에 여러 유형의 번역 (인코딩)이있을 수도 있으므로 다음과 같이하십시오.

curl -G "$(perl -MURI::Escape -e 'print uri_escape shift, , q{^A-Za-z0-9\-._~/:}' -- "$URL")"

대신에.


1
참고 echo "$URL" | sed 's/ /%20/'이있는 경우 옳은 일을하지 않습니다 %URL에 문자. 또한, 공간은 일반적으로 부호화된다 +(그리고 +%2b). 신뢰할 수있는 Perl 솔루션을 추천합니다.
Gilles

1
sed 's/ /%20/g'번역 할 공간이 두 개 이상인 경우 ...
sebthebert

참고 Perl URI :: Escape 모듈을 설치해야했습니다.
buzz3791
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.