HTTP 다중 파트 (POST) 요청의 경계 매개 변수는 무엇입니까?
전송 할당량의 진화를 위해 웹 페이지를 확인하는 프로세스를 자동화하는 사이드 바 가젯을 개발하려고합니다. 거의 다 왔지만 작동하는 데 필요한 마지막 단계가 있습니다. 올바른 POST 데이터가 포함 된 HttpRequest를 PHP 페이지로 전송하는 것입니다. firefox 플러그인을 사용하여 헤더의 "Content-Type"은 다음과 같습니다.
Content-Type=multipart/form-data; boundary=---------------------------99614912995
"boundary"매개 변수가 무작위로 보이는데 POSTDATA는 다음과 같습니다.
POSTDATA =-----------------------------99614912995
Content-Disposition: form-data; name="SOMENAME"
Formulaire de Quota
-----------------------------99614912995
Content-Disposition: form-data; name="OTHERNAME"
SOMEDATA
-----------------------------99614912995--
나는 미스터리 "경계"매개 변수가 돌아 오는 POSTDATA를 올바르게 에뮬레이트하는 방법을 이해하지 못합니다.
누군가 내가 이것을 어떻게 해결할 수 있는지 알고 있습니까?
경계 매개 변수는 끝에 임의의 문자열을 더한 하이픈 수로 설정되지만 아무 것도 설정할 수 있습니다. 문제는 경계 문자열이 요청 데이터에 표시되면 경계로 처리된다는 것입니다.
몇 가지 팁과 multipart / form-data 전송을위한 예제 함수는 이 질문에 대한 내 대답을 참조하십시오 . 보내려는 각 부분에 대해 루프를 사용하도록 해당 함수를 수정하는 것은 그리 어렵지 않습니다.
RFC 1341, 섹션 7.2.1 에서 인용하자면 boundary
, Content-Type
헤더 의 매개 변수 에 대한 관련 비트 (MIME의 경우) 라고 생각하는 내용은 다음과 같습니다.
"multipart"의 모든 하위 유형은 공통 구문을 공유합니다.
멀티 파트 엔티티의 Content-Type 필드에는 캡슐화 경계를 지정하는 데 사용되는 "boundary"매개 변수가 필요합니다. 캡슐화 경계는 두 개의 하이픈 문자 ( "-", 십진수 코드 45)와 그 뒤에 Content-Type 헤더 필드의 경계 매개 변수 값으로 구성된 행으로 정의됩니다.
그리고 다음을 명확히합니다.
따라서 일반적인 다중 부분 Content-Type 헤더 필드는 다음과 같습니다.
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
이는 엔티티가 RFC 822 메시지와 구문 적으로 동일한 구조를 가진 여러 부분으로 구성되어 있음을 나타냅니다. 단, 헤더 영역이 완전히 비어있을 수 있고 각 부분 앞에 --gc0p4Jq0M2Yt08jU534c0p 줄이옵니다.
참고 사항 :
- 캡슐화 경계는 줄의 시작 부분, 즉 CRLF (Carriage Return-Line Feed) 다음에 발생해야합니다.
- 경계 바로 뒤에 다른 CRLF와 다음 부분에 대한 헤더 필드 또는 두 개의 CRLF가 와야합니다.이 경우 다음 부분에 대한 헤더 필드가 없습니다 (따라서 Content-Type text / 평원).
- 캡슐화 경계는 캡슐화 내에 표시되지 않아야하며 두 개의 선행 하이픈을 계산하지 않고 70자를 넘지 않아야합니다.
마지막으로 중요한 것은 :
마지막 본문 부분 다음에 오는 캡슐화 경계는 더 이상 본문 부분이 뒤 따르지 않음을 나타내는 구별 구분 기호입니다. 이러한 구분 기호는 이전 구분 기호와 동일하며 행 끝에 두 개의 하이픈이 더 추가됩니다.
--gc0p4Jq0M2Yt08jU534c0p--
전체 그림을 얻기 전에 잠시 동안 로밍해야했기 때문에 이것이 향후 다른 사람에게 도움이되기를 바랍니다 (가장 깊은 이해를 위해 필요한 RFC를 읽으십시오).
multipart / form-data의 실제 사양은 RFC 7578에 있습니다. 경계는 4.1 절에 정의되어 있습니다.
'program tip' 카테고리의 다른 글
LINQ 쿼리에서 NameValueCollection에 액세스 할 수 있도록 설정 (0) | 2020.12.04 |
---|---|
복합 색인은 어떻게 작동합니까? (0) | 2020.12.04 |
onkeydown 이벤트에서 백 스페이스를 캡처하는 방법 (0) | 2020.12.04 |
메모장 ++ 데이터 열을 어떻게 삽입합니까? (0) | 2020.12.04 |
Xcode-오류 : pathspec '…'가 git에 알려진 파일과 일치하지 않습니다. (0) | 2020.12.03 |