UrlFetchApp을 사용하여 여러 API에 액세스하는 Google App Script를 작성 중입니다.
내 API POST 요청 중 하나는 페이로드에 정수 값을 예상하지만 UrlFetchApp.fetch는 정수 값 (예 : 0)을 부동 소수점 (예 : 0.0)으로 변경합니다.
내 옵션은 다음과 같습니다.
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: 0 } }
API에서 반환 된 오류 메시지는 다음과 같습니다.
{"message":"The request is invalid.","modelState":{"request.App":["The value '0.0' is not valid for App.","The App field is required."]}}
UrlFetchApp.fetch가 내 앱 값 : 0을이 API 엔드 포인트가 허용하지 않는 0.0으로 변환했습니다.
대신 요청 값을 문자열 "0"으로 강제 설정했지만 API가 해당 속성에 대한 문자열 유형을 허용하지 않습니다.
누구든지 이것에 대한 해결 방법을 알고 있습니까? UrlFetchApp.fetch에 정수 값을 "있는 그대로"유지하고 부동 소수점으로 변환하지 않도록하려면 어떻게해야합니까?
추신. 같은 요청이 다음과 같이 cURL을 통해 나에게 적합합니다.
curl --location --request POST "https://$url" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $token" \
--data "{\"someStringA\":\"$foo\",\"someStringB\":\"$bar\",\"app\":0}"
도움을 주셔서 미리 감사드립니다.
업데이트 : 사과하지만 여기서 문제는 결국 UrlFetchApp에 없었습니다. 내 문제는 API에서 돌아 오는 응답이 빈 객체이고 다음과 같이 기록하려고 시도했다는 것입니다. JSON.parse (response); 언급 된 오류가 발생합니다.
귀하의 질문에 불행히도 사용하려는 API의 사양, 요청 헤더 및 확인한 curl 명령에 대해 잘 모르겠습니다. 그래서 다음과 같은 수정 패턴을 제 추측으로 제안하고 싶습니다.
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: 0 } }
const options = { method: 'POST', headers: {...}, contentType: "application/json", payload: JSON.stringify({ someStringA: "foo", someStringB: "bar", App: 0 }) };
Content-Type
에 headers
, 그것을 제거하십시오.const options = { method: 'POST', headers: {...}, payload: JSON.stringify({ someStringA: "foo", someStringB: "bar", App: 0 }) };
const options = { method: 'POST', headers: {...}, payload: { someStringA: "foo", someStringB: "bar", App: "0" } };
"0"
구문 분석 된 데이터에서 양식 데이터의 문자열 값으로 전송됩니다.curl 명령에서 내 패턴 1이 curl 명령과 동일한 요청임을 이해했습니다. 그러나 Unexpected end of JSON input
귀하의 회신에서 불행히도 내 패턴 1을 사용하는 현재 스크립트에 대해 잘 모르겠지만 curl 명령이 Google Apps Script로 변환되면 다음과 같이됩니다. 다시 테스트 할 수 있습니까?
const token = "###"; // Please use your token.
const data = { someStringA: "foo", someStringB: "bar", App: 0 };
const options = {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
contentType: "application/json",
payload: JSON.stringify(data)
};
const res = UrlFetchApp.fetch("your URL", options);
console.log(res.getContentText())
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다