본문 바로가기
카테고리 없음

web gz 압축

by 서율97 2023. 1. 15.

AyncElegantOTA 라이브러리는 '우아한' 인터페이스를 사용하여 프로젝트에 WebOTA를 쉽게 추가할 수 있는 방법입니다.

페이스북의 최근 토론은 'AsyncElegantOTA를 어떻게 수정할 수 있습니까?'에 관한 것이었습니다.

물론 JavaScript 및/또는 HTML에 대해 알고 있다면 그렇게 어렵지는 않지만 라이브러리 파일에 뛰어든 사람은 곧 많은 부분이 암호화된 것처럼 보이는 것을 알게 될 것입니다. , 그러나 걸릴 수 있습니다.

왜 AsyncElegantOTA 라이브러리를 변경하고 싶은지, 기본 ESP8266HTTPUpdateServer 라이브러리를 사용하고 원하는 대로 수정하면 안 되는 이유를 스스로에게 물어보는 것은 가치가 있습니다. 암호화된 파일을 해독할 필요가 없습니다. C:\Users\<name>\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.3\libraries\ESP8266HTTPUpdateServer.src에서 해당 라이브러리를 찾을 수 있습니다. 암호 보호를 포함하고 좀 더 멋져 보이도록 이 라이브러리를 수정  좋은 예가 있습니다.

그러나 정말로 AsyncElegantOTA 라이브러리를 다루고 싶다면 다음과 같이 하십시오.

AsyncElegantOTA 파일을 설치한 위치로 이동하여 elegantWebpage.h 파일을 엽니다. 다음과 같습니다.

우리가 관심 있는 부분은 de PROGMEM 콘텐츠이지만 여전히 인코딩되어 있는 한 아무 것도 할 수 없습니다. 디코딩하려면 대괄호 없이 엔터티의 PROGMEM 콘텐츠를 복사합니다. 사실 사이에 쉼표가 있는 숫자만

그런 다음 Cyberchef 웹페이지 로 이동 하여 PROGMEM 콘텐츠를 입력 필드에 붙여넣습니다. 입력 필드에서 2개의 디코딩 작업을 수행해야 합니다.
첫째: 작업에서 "10진수에서"('데이터 형식' 제목 아래)를 선택하고 두 번 클릭하여 "레시피" 아래로 이동하고 구분 기호로 '쉼표'를 선택합니다. (내가 준 링크를 따라가면 두 작업이 이미 추가되어 있어야 함)

그러나 두 번째 작업('Unzip')을 추가하기 전에 먼저 확인을 수행합니다. 'Output' 헤더를 살펴봅니다. 3개의 매개변수를 찾을 수 있습니다.

'Output' 제목에서 'length'를 확인하면 elegantWebpage.h에 언급된 ELEGANT_HTML_SIZE 상수와 같은 숫자임을 알 수 있습니다. 라이브러리 버전 2.2.5를 사용하는 경우 해당 숫자는 "53715"일 가능성이 높습니다. 나중에 새 값 출력을 계산하기 위해 메모가 필요하기 때문에 해당 숫자가 언제/어디서 나타났는지(예: '인코딩된 섹션의 10진수 변환에서' 이후) 메모해 두세요. '
우리가 추가해야 하는 두 번째 디코딩은 다음과 같습니다. 압축 해제. 따라서 작업에서 이제 "Gunzip"('압축' 제목 아래에서 찾으십시오)을 선택하면 출력 파일에 HTML 구조가 나타나야 합니다.

HTML을 스크롤하면 HTML 코드에 JavaScript가 포함되어 있음을 알 수 있습니다. 전체적으로(HTML 및 JS) 수정할 수 있는 코드입니다. 정확히 수정하려는 것은 귀하에게 달려 있습니다.

HTML /Javascript 파일을 수정한 후 이를 라이브러리에 다시 포함할 수 있는 몇 가지 방법이 있습니다. 암호화되지 않은 상태로 두고 다음과 같이 elegantWebpage.h 파일에 '원시 리터럴'로 다시 넣을 수 있습니다.

const char ELEGANT_HTML[] PROGMEM = R"---( 
<html> 
  <head> 
... 
)---";



그러나 AsyncElegantOTA.h 파일도 변경해야 합니다.

위 줄은 다음과 같이 변경해야 합니다.

AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", ELEGANT_HTML);

"ELEGANT_HTML"은 이제 원시 리터럴에 지정한 이름입니다. HTML 파일을 다시 인코딩하는 것이 더 간단하다는 것을 알았기 때문에 이것은 내가 따랐던 방법이 아닙니다. 이를 위해 Cyberchef 웹 사이트로 돌아가지만 이제 HTML 파일을 입력 필드에 붙여넣습니다. 이전 두 작업을 제거하거나 일시 중지하고 이제 다음과 같이 "Gzip" 및 "To Decimal"을 추가합니다.

올바르게 수행했다면 이제 출력 필드에 새로운 십진수 코드가 표시되어야 합니다. 그것을 복사하여 'elegantWebpage.h' 파일의 이전 PROGMEM 콘텐츠 위에 붙여넣으십시오.

이제 거의 끝났습니다. elegantWebpage.h 파일에서 크기 상수를 업데이트해야 합니다.

const uint32_t ELEGANT_HTML_SIZE = 53715;

음, 파일 길이를 찾을 수 있는 위치를 미리 메모해 두라고 요청한 것을 기억하십니까?

수정하고 다시 암호화한 파일의 길이를 찾아야 합니다
. 출력 필드에서 "altered and recrypted to decimal again" 파일을 복사하여 elegantWebpage.h 파일에 붙여넣은 후 이제 입력 필드에 붙여넣습니다. 다시 Cyberchef 웹사이트. 선택한 유일한 작업이 '쉼표'가 구분 기호로 설정된 "십진수에서"인지 확인하십시오. 이제 출력 필드 헤더에 새 크기가 표시됩니다. 이 크기를 사용하여 ELEGANT_HTML_SIZE 상수를 업데이트합니다.

이제 수정이 작동해야 합니다.