IT이야기

curl과 함께 PATCH 동사를 사용하는 방법

cyworld 2021. 9. 23. 22:42
반응형

curl과 함께 PATCH 동사를 사용하는 방법


서버에 PATCH 호출을 하려고 합니다. 다음 명령을 사용하고 있습니다.

curl --data status=closed -X PATCH https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515 

이것이 PATCH 요청을 보내는 올바른 방법입니까? 상태 매개변수 세트가 없다는 오류가 발생합니다. --data는 POST 요청 전용이므로 서버가 상태 매개변수를 찾지 못한다고 추측합니다.

다음은 응답입니다(참고).

{"http_status":400,"error":"Parameter validation errors","validation_errors":{"status":{"error":"Request missing status parameter."}}}

여기에서 이 서비스에 대한 문서를 찾을 수 있습니다 .


다음 형식을 사용해야 합니다.

curl --request PATCH https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?status=closed

사용 -X은 PATCH 요청을 보내는 측면에서 작동하지 않는 것 같습니다 --request PATCH. . 또한 해당 API status는 PATCH 본문의 일부가 아닌 URL의 쿼리 매개변수로 매개변수 를 원하는 것 같습니다 .

이 시점에서 서버는 "페이지 설정을 수정하려면 로그인해야 합니다."라는 401 오류를 반환합니다. 다음과 같이 먼저 로그인해야 한다고 가정합니다.

curl --request POST "https://api.viafoura.com/v2/dev.viafoura.com/users/login?password=TeNn!sNum8er1&email=novak@example.com"

해당 예제에서 설명서의 자격 증명을 사용했는데 개발자 서버에서 작동한다고 생각했지만 현재 "잘못된 암호" 오류를 반환합니다.

그러나 유효한 자격 증명이 있는 경우 PATCH 요청을 인증하는 데 사용할 수 있는 세션 쿠키를 다시 가져와야 합니다.


비슷한 컬 요청으로 tastypie 리소스에 PATCH를 시도했습니다. 나에게 문제는 데이터가 다음과 같이 전달되어야 한다는 것이었습니다.

curl --data '{"field": "new_value"}' -X PATCH http://127.0.0.1:8000/api/v1/resource_uri/pk/

데이터 플래그에 전달한 내용이 질문에서와 같이 매개변수를 직접 입력하는 대신 문자열로 전달된 사전처럼 보이는 내부에 있는 방법에 주목하세요. 물론 param도 이미 답변된 대로 작동하지만 일부 사람들에게 도움이 되길 바랍니다.


명령줄이 작동해야 합니다. PATCH RFC5789 에서 볼 수 있듯이 HTTP 요청은 curl이 보내는 것과 유사 합니다(전체 curl 통신을 보려면 --trace-ascii 사용 ). Content-Type을 변경하고 싶을 수도 있습니다( --header 사용 ).

언급된 누락된 상태 매개변수는 요청 본문의 내용을 참조하는 것일 수 있습니다. "status=closed" 데이터가 올바른 형식(JSON?)이 아니거나 불완전할 수 있습니다.

(API에 대한 링크를 포함하려고 했던 것 같은데 거기에 링크가 없습니다!)


이것은 내 샘플 앱에서 나를 위해 일한 것입니다.

curl --data 'id=57&equipment_type_name=57 edited' -X PATCH http://localhost:5009/equipment-type/update
{
  "info": "Equipment type updation.",
  "response": {
    "status": "success",
    "message": "updateEquipmentType",
    "result": {
      "data": [
        [
          {
            "update_status": 1
          }
        ],
        {
          "fieldCount": 0,
          "affectedRows": 0,
          "insertId": 0,
          "serverStatus": 2,
          "warningCount": 0,
          "message": "",
          "protocol41": true,
          "changedRows": 0
        }
      ]
    }
  }
}

다른 방법은 다음과 같습니다. 이것은 POST 호출을 통한 것입니다.

curl --data status=closed https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?verb=PATCH 

나는 이것이 일반적인 방법이 아니며 이 특정한 경우에만 적용된다고 생각합니다.

참조URL : https://stackoverflow.com/questions/16306624/how-to-use-patch-verb-with-curl

반응형