requests에서bytearray 데이터를 발송할 수 없습니다
requests에서bytearray 데이터를 발송할 수 없습니다 import requests
body = b"abc"
body = bytearray(body)
r = requests.post('https://example.com', data=body)
# r = requests.post('https://example.com', data=memoryview(body))
print(r.status_code)
TypeError Traceback (most recent call last)
~/.pyenv/versions/3.7.0/Python.framework/Versions/3.7/lib/python3.7/http/client.py in send(self, data)
976 try:
--> 977 self.sock.sendall(data)
978 except TypeError:
~/.pyenv/versions/3.7.0/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/contrib/pyopenssl.py in sendall(self, data)
330 while total_sent < len(data):
--> 331 sent = self._send_until_done(data[total_sent:total_sent + SSL_WRITE_BLOCKSIZE])
332 total_sent += sent
~/.pyenv/versions/3.7.0/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/contrib/pyopenssl.py in _send_until_done(self, data)
319 try:
--> 320 return self.connection.send(data)
321 except OpenSSL.SSL.WantWriteError:
~/.pyenv/versions/3.7.0/Python.framework/Versions/3.7/lib/python3.7/site-packages/OpenSSL/SSL.py in send(self, buf, flags)
1731 if not isinstance(buf, bytes):
-> 1732 raise TypeError("data must be a memoryview, buffer or byte string")
1733 if len(buf) > 2147483647:
TypeError: data must be a memoryview, buffer or byte string
정상적인 요청이지만 요청의 내용은 bytearray
일 수 없고, 어떤 컴퓨터는 bytearray
형 데이터를 제출할 수 있다.
인터넷에 올라온 게시물들은 모두 pyopenssl
의 문제라고 하는데, 끝까지 무슨 문제인지 모르겠지만.
이상설에 의하면 제출한 내용은 memoryview, buffer or byte string
이어야 하며 제출한 내용을 ``memoryview`로 변경해야 합니다.
memoryview
가변 바이트 시퀀스 python3
에서 str
기본값은 unicode
인코딩이며, bytearray
를 통해서만 바이트에 접근할 수 있습니다.str
및 bytearray
슬라이스 작업을 수행하면 새로운 슬라이스str
및 bytearray
데이터가 생성되고 memoryview
이후에는 데이터를 복제하지 않습니다.In [72]: stra = bytearray(b'abcde')
In [73]: strb = stra[:3]
In [74]: stra
Out[74]: bytearray(b'abcde')
In [75]: strb
Out[75]: bytearray(b'abc')
In [91]: a = bytearray(b'aaaa') #
In [92]: b = memoryview(a) #
In [93]: b.readonly #
Out[93]: False
In [94]: c = b[:2] # bytearray
In [95]: c
Out[95]: <memory at 0x125fca048>
In [97]: c[:2] = b'ww' # b
In [98]: c.tobytes()
Out[98]: b'ww'
In [99]: b.tobytes()
Out[99]: b'wwaa'
In [100]: a = b'aaaa'
In [101]: b = memoryview(a)
In [102]: b.readonly #
Out[102]: True
memoryview
를 사용하면 큰 str
로 단락 분석을 할 때 대량의 절편 조작을 피할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 requests를 사용하여 multipart/form-data 형식의 데이터를 보낼 때 Content-Ope를 "multipart/form-data"로 설정한 헤더를 전달할 수 없습니다
외부 API는 Authorization 헤더를 사용해야 하기 때문에 헤더 취득 함수의 공통 함수를 만들고 사용합니다.
API의 내용 유형은 기본적으로'application/json'이 필요합니다.
일부'applica...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
import requests
body = b"abc"
body = bytearray(body)
r = requests.post('https://example.com', data=body)
# r = requests.post('https://example.com', data=memoryview(body))
print(r.status_code)
TypeError Traceback (most recent call last)
~/.pyenv/versions/3.7.0/Python.framework/Versions/3.7/lib/python3.7/http/client.py in send(self, data)
976 try:
--> 977 self.sock.sendall(data)
978 except TypeError:
~/.pyenv/versions/3.7.0/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/contrib/pyopenssl.py in sendall(self, data)
330 while total_sent < len(data):
--> 331 sent = self._send_until_done(data[total_sent:total_sent + SSL_WRITE_BLOCKSIZE])
332 total_sent += sent
~/.pyenv/versions/3.7.0/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/contrib/pyopenssl.py in _send_until_done(self, data)
319 try:
--> 320 return self.connection.send(data)
321 except OpenSSL.SSL.WantWriteError:
~/.pyenv/versions/3.7.0/Python.framework/Versions/3.7/lib/python3.7/site-packages/OpenSSL/SSL.py in send(self, buf, flags)
1731 if not isinstance(buf, bytes):
-> 1732 raise TypeError("data must be a memoryview, buffer or byte string")
1733 if len(buf) > 2147483647:
TypeError: data must be a memoryview, buffer or byte string
In [72]: stra = bytearray(b'abcde')
In [73]: strb = stra[:3]
In [74]: stra
Out[74]: bytearray(b'abcde')
In [75]: strb
Out[75]: bytearray(b'abc')
In [91]: a = bytearray(b'aaaa') #
In [92]: b = memoryview(a) #
In [93]: b.readonly #
Out[93]: False
In [94]: c = b[:2] # bytearray
In [95]: c
Out[95]: <memory at 0x125fca048>
In [97]: c[:2] = b'ww' # b
In [98]: c.tobytes()
Out[98]: b'ww'
In [99]: b.tobytes()
Out[99]: b'wwaa'
In [100]: a = b'aaaa'
In [101]: b = memoryview(a)
In [102]: b.readonly #
Out[102]: True
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 requests를 사용하여 multipart/form-data 형식의 데이터를 보낼 때 Content-Ope를 "multipart/form-data"로 설정한 헤더를 전달할 수 없습니다외부 API는 Authorization 헤더를 사용해야 하기 때문에 헤더 취득 함수의 공통 함수를 만들고 사용합니다. API의 내용 유형은 기본적으로'application/json'이 필요합니다. 일부'applica...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.