hyper 양식 데이터 보내기
앞말
어느 아름다운 오후, 운비는 서버의nginx를 업그레이드했고 http 프로토콜도 http2.0으로 변했다. 내 로컬의requests는 더 이상 서버에 연결되지 않았고 이마hyper를 찾았다
하지만hyper의 문서는 매우 간단하게 쓰여져 있고,requests에 비해 아직 그렇게 인성화되지 않았습니다.demo를 보면서 말씀하세요.
hyper 간단한 사용
from hyper import HTTP20Connection
conn = HTTP20Connection(host='xxx.xxx.xxx.xxx', port=80)
# host IP , http https
# port 443
response = conn.request(method='POST', url='/post', body=None, headers=None) # data
resp = conn.get_response(response)
print(resp.read()) # , requests res.content
데이터 파라미터가 없다는 것을 알게 될 것입니다. 사실 우리는 데이터를 써도 마지막에 우리가 전송할 때 데이터가 body 안에 들어갈 것이라고 생각할 수 있습니다. 그러나 구체적으로 어떻게 바뀌었는지는 Requests 모듈을 참고했습니다.
requests 모듈에서 데이터에 대해 어떤 변환을 했습니까
from collections.abc import Mapping
from urllib.parse import urlencode
def to_key_val_list(value):
if value is None:
return None
if isinstance(value, (str, bytes, bool, int)):
raise ValueError('cannot encode objects that are not 2-tuples')
if isinstance(value, Mapping):
value = value.items()
return list(value)
def _encode_params(data):
if isinstance(data, (str, bytes)):
return data
elif hasattr(data, 'read'):
return data
elif hasattr(data, '__iter__'):
result = []
for k, vs in to_key_val_list(data):
if isinstance(vs, (str, bytes)) or not hasattr(vs, '__iter__'):
vs = [vs]
for v in vs:
if v is not None:
result.append(
(k.encode('utf-8') if isinstance(k, str) else k,
v.encode('utf-8') if isinstance(v, str) else v))
return urlencode(result, doseq=True)
else:
return data
data = {"name": "tom", "ege": "20"}
print(_encode_params(data)) # name=tom&ege=20
위의 이 코드는 제가 Requests 원본 코드에서 캡처한 것입니다. 직접 실행할 수 있습니다. 결과는name=tom &ege=20입니다. 이것을 보면 어떻게 변환하는지 알 수 있습니다. 다음에hyper로 폼 데이터를 보낼 수 있습니다.
hyper 양식 데이터 보내기
from hyper import HTTP20Connection
conn = HTTP20Connection(host='xxx.xxx.xxx.xxx', port=80)
response = conn.request(method='POST', url='/post',
body='name=tom&age=20',
headers={'Content-Type': 'application/x-www-form-urlencoded'})
resp = conn.get_response(response)
요청 헤더를 추가하는 것을 잊지 마십시오. 이렇게 하면 이전에requests를 사용한 인터페이스와 연결할 수 있습니다
다음으로 전송:https://www.cnblogs.com/wuyongqiang/p/10179535.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.