"@"로 시작하는 cURL을 사용하여 콘텐츠를 게시하는 방법은 무엇입니까?

"@"로 시작하는 cURL을 사용하여 콘텐츠를 게시하는 방법은 무엇입니까?

주문하다

curl http://localhost/ --data @hello

파일에서 읽으려고 시도합니다 hello. 이 기호를 어떻게 피할 수 있나요 @?

답변1

컬의 내부에 대해 더 자세히 배우려고 하지 않고 컬에 직접 파이핑하는 것이 좋습니다.

printf @hello | curl http://localhost/ --data @-

주석에서 @ulrich-schwarz가 제안한 것처럼 --data @<(echo @hello)더 편리하다면 사용할 수도 있습니다(모든 쉘이 이 구문을 지원하는 것은 아닙니다).

@컬-7.41.0의 소스 코드를 보면 파일 이름으로 해석되는 것을 방지하기 위해 기호를 이스케이프 처리할 수 있는 방법이 없습니다 .

if('@' == is_file) {
  /* a '@' letter, it means that a file name or - (stdin) follows */

  if(curlx_strequal("-", p)) {
    file = stdin;
    set_binmode(stdin);
  }
  else {
    file = fopen(p, "rb");
    if(!file)
      warnf(config,
            "Couldn't read data from file \"%s\", this makes "
            "an empty POST.\n", nextarg);
  }

  /* ... */
}

따라서 불행하게도 우리는 위의 파이프라인 솔루션에 갇혀 있는 것 같습니다.

답변2

데이터는 콘텐츠 유형으로 전송됩니다.application/x-www-form-urlencoded. 원칙적으로 %40이는 로 디코딩되어야 하므로 @다음 명령은 동등한 데이터를 전송해야 합니다.

curl http://localhost/ --data %40hello

그러나 이는 서버측 애플리케이션이 실제로 URL 디코딩을 수행하는지 여부에 따라 작동할 수도 있고 작동하지 않을 수도 있습니다. 인코딩되지 않은 데이터가 필요한 경우(응용 프로그램에서 데이터에 특수 문자가 포함되는 것을 원하지 않는 경우 매우 일반적임) 응용 프로그램은 이를 %40hello.

애플리케이션이 디코딩되지 않는 경우,파이프를 통해 컬링에 데이터 전달.

답변3

컬에서매뉴얼 페이지:

--data-raw <data>

(HTTP) 이는 데이터 게시와 유사 -d하지만 --data@ 문자의 특별한 해석이 없습니다.

그래서 당신의 명령은 다음과 같아야합니다

관련 정보