hyper 양식 데이터 보내기

2678 단어

앞말


어느 아름다운 오후, 운비는 서버의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

좋은 웹페이지 즐겨찾기