HTTP를 통해 javascript로 바이너리 데이터 전송
네트워크상의 디바이스에 HTTP POST 를 송신하려고 합니다.디바이스에 특정 4바이트의 데이터를 송신하고 싶은데, 디바이스에는 문자열밖에 송신할 수 없는 것 같습니다.javascript를 사용하여 raw binary를 보낼 수 있는 방법이 있습니까?
POST를 실행하기 위해 사용하는 스크립트는 다음과 같습니다.데이터 필드에 문자열을 입력하지 않으면 현재 실행되지 않습니다.좋은 생각 있어요?
(function ($) {
$.ajax({
url: '<IP of Address>',
type: 'POST',
contentType: 'application/octet-stream',
//data:'253,0,128,1',
data:0xFD008001,
crossDomain: true
});
})(jQuery);
기본적으로 jQuery는 데이터를 직렬화합니다(통과).data
property) - 즉,0xFD008001
번호는 '4244668417' 문자열(4바이트가 아닌 10바이트)로 서버에 전달되기 때문에 서버에서 예상대로 처리되지 않습니다.
이러한 동작을 방지하려면 다음을 설정해야 합니다.$.ajax
소유물processData
로.false
:
기본적으로는 데이터 옵션에 개체로 전달된 데이터(기술적으로는 문자열 이외)는 처리되어 쿼리 문자열로 변환되며 기본 컨텐츠 유형인 "application/x-www-form-urlencoded"에 적합합니다.DOMDocument 또는 기타 처리되지 않은 데이터를 보내려면 이 옵션을 false로 설정하십시오.
...하지만 그것은 전체 이야기의 일부에 불과합니다.XMLHttpRequest.send
에는 독자적인 제약사항이 있습니다.그렇기 때문에 Type Arrays를 사용하여 직접 시리얼라이저를 만드는 것이 최선이라고 생각합니다.
// Since we deal with Firefox and Chrome only
var bytesToSend = [253, 0, 128, 1],
bytesArray = new Uint8Array(bytesToSend);
$.ajax({
url: '%your_service_url%',
type: 'POST',
contentType: 'application/octet-stream',
data: bytesArray,
processData: false
});
또는 jQuery를 전혀 사용하지 않는 경우:
var bytesToSend = [253, 0, 128, 1],
bytesArray = new Uint8Array(bytesToSend);
var xhr = new XMLHttpRequest();
xhr.open('POST', '%your_service_url%');
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.send(bytesArray);
xhr2를 사용하여 Ajax를 통해 이진 데이터를 전송할 수 있으며, 데이터를 유형 배열 또는 BLOB로 전송할 수 있습니다.
(function ($) {
var data = new Uint32Array(1);
data[0] = 0xFD008001;
$.ajax({
url: '<IP of Address>',
type: 'POST',
contentType: false,
processData: false,
//data:'253,0,128,1',
data:data,
crossDomain: true
});
})(jQuery);
https://developer.mozilla.org/en-US/docs/Web/API/Uint32Array
다음과 같이 ArrayBuffer 유형의 데이터를 ArrayBufferView로 변환할 수 있습니다.
var fileContent = new DataView(<ArrayBuffer_data>);
이렇게 하면 fileContent를 전송할 때 콘솔에 경고가 표시되지 않습니다.
사용할 수 있습니다.atob()
그리고.btoa()
:
var data = new Uint32Array(1);
data[0] = 0xFD008001;
atob(data)
그러면 이진 데이터가 텍스트로 전송될 수 있는 base64 문자열로 변환됩니다.
언급URL : https://stackoverflow.com/questions/19959072/sending-binary-data-in-javascript-over-http
'programing' 카테고리의 다른 글
react/typescript: 매개 변수 'props'에 암시적으로 '임의' 형식 오류가 있습니다. (0) | 2023.03.01 |
---|---|
WordPress는 이미지 메타 데이터를 어디에 저장합니까? (0) | 2023.03.01 |
워드프레스에서 상위 페이지의 모든 하위 페이지를 가져오려면 어떻게 해야 합니까? (0) | 2023.03.01 |
선택 목록의 출력을 부모 목록에 종속시키려면 어떻게 해야 합니까? (0) | 2023.02.18 |
Jackson Json Type Info 。As.EXTERNAL_PROPERTY가 예상대로 작동하지 않습니다. (0) | 2023.02.15 |