コード例 #1
0
def test_invalid_urls():
    with pytest.raises(httpcore.InvalidURL):
        httpcore.Request("GET", "example.org")

    with pytest.raises(httpcore.InvalidURL):
        httpcore.Request("GET", "invalid://example.org")

    with pytest.raises(httpcore.InvalidURL):
        httpcore.Request("GET", "http:///foo")
コード例 #2
0
def test_url():
    request = httpcore.Request("GET", "http://example.org")
    assert request.url.scheme == "http"
    assert request.url.port == 80
    assert request.url.full_path == "/"

    request = httpcore.Request("GET", "https://example.org/abc?foo=bar")
    assert request.url.scheme == "https"
    assert request.url.port == 443
    assert request.url.full_path == "/abc?foo=bar"
コード例 #3
0
    async def handle_async_request(
        self,
        request: Request,
    ) -> Response:
        assert isinstance(request.stream, AsyncByteStream)

        req = httpcore.Request(
            method=request.method,
            url=httpcore.URL(
                scheme=request.url.raw_scheme,
                host=request.url.raw_host,
                port=request.url.port,
                target=request.url.raw_path,
            ),
            headers=request.headers.raw,
            content=request.stream,
            extensions=request.extensions,
        )
        with map_httpcore_exceptions():
            resp = await self._pool.handle_async_request(req)

        assert isinstance(resp.stream, typing.AsyncIterable)

        return Response(
            status_code=resp.status,
            headers=resp.headers,
            stream=AsyncResponseStream(resp.stream),
            extensions=resp.extensions,
        )
コード例 #4
0
    async def request(
        self,
        method,
        url,
        headers=(),
        body=b"",
        stream=False,
        ssl=None,
        timeout=None,
    ):
        if ssl is None:
            ssl = self.ssl_config
        if timeout is None:
            timeout = self.timeout

        parsed_url = httpcore.URL(url)
        request = httpcore.Request(
            method, parsed_url, headers=headers, body=body
        )
        connection = await self.acquire_connection(
            parsed_url, ssl=ssl, timeout=timeout
        )
        if self._request_delay:
            print(f"\t>> Sleeping ({self._request_delay})")
            await asyncio.sleep(self._request_delay)
        response = await connection.send(request)
        if not stream:
            try:
                await response.read()
            finally:
                await response.close()
        return response
コード例 #5
0
def test_request_with_invalid_headers():
    with pytest.raises(TypeError) as exc_info:
        httpcore.Request("GET", "https://www.example.com/",
                         headers=123)  # type: ignore
    assert (str(
        exc_info.value
    ) == "headers must be a mapping or sequence of two-tuples, but got int.")
コード例 #6
0
def test_override_accept_encoding_header():
    headers = [(b"accept-encoding", b"identity")]

    request = httpcore.Request("GET", "http://example.org", headers=headers)
    request.prepare()
    assert request.headers == httpcore.Headers([(b"host", b"example.org"),
                                                (b"accept-encoding",
                                                 b"identity")])
コード例 #7
0
def test_override_host_header():
    headers = [(b"host", b"1.2.3.4:80")]

    request = httpcore.Request("GET", "http://example.org", headers=headers)
    request.prepare()
    assert request.headers == httpcore.Headers([(b"accept-encoding",
                                                 b"deflate, gzip, br"),
                                                (b"host", b"1.2.3.4:80")])
コード例 #8
0
def test_content_length_header():
    request = httpcore.Request("POST", "http://example.org", data=b"test 123")
    request.prepare()
    assert request.headers == httpcore.Headers([
        (b"host", b"example.org"),
        (b"content-length", b"8"),
        (b"accept-encoding", b"deflate, gzip, br"),
    ])
コード例 #9
0
def test_request():
    request = httpcore.Request("GET", "https://www.example.com/")
    assert request.method == b"GET"
    assert request.url == httpcore.URL("https://www.example.com/")
    assert request.headers == []
    assert request.extensions == {}
    assert repr(request) == "<Request [b'GET']>"
    assert (
        repr(request.url) ==
        "URL(scheme=b'https', host=b'www.example.com', port=None, target=b'/')"
    )
    assert repr(request.stream) == "<ByteStream [0 bytes]>"
コード例 #10
0
def test_url_encoded_data():
    request = httpcore.Request("POST",
                               "http://example.org",
                               data={"test": "123"})
    request.prepare()
    assert request.headers == httpcore.Headers([
        (b"host", b"example.org"),
        (b"content-length", b"8"),
        (b"accept-encoding", b"deflate, gzip, br"),
        (b"content-type", b"application/x-www-form-urlencoded"),
    ])
    assert request.content == b"test=123"
コード例 #11
0
def test_transfer_encoding_header():
    async def streaming_body(data):
        yield data  # pragma: nocover

    data = streaming_body(b"test 123")

    request = httpcore.Request("POST", "http://example.org", data=data)
    request.prepare()
    assert request.headers == httpcore.Headers([
        (b"host", b"example.org"),
        (b"transfer-encoding", b"chunked"),
        (b"accept-encoding", b"deflate, gzip, br"),
    ])
コード例 #12
0
def test_override_content_length_header():
    async def streaming_body(data):
        yield data  # pragma: nocover

    data = streaming_body(b"test 123")
    headers = [(b"content-length", b"8")]

    request = httpcore.Request("POST",
                               "http://example.org",
                               data=data,
                               headers=headers)
    request.prepare()
    assert request.headers == httpcore.Headers([
        (b"host", b"example.org"),
        (b"accept-encoding", b"deflate, gzip, br"),
        (b"content-length", b"8"),
    ])
コード例 #13
0
ファイル: test_mock.py プロジェクト: hannseman/respx
async def test_httpcore_request(url, port):
    async with MockRouter(using="httpcore") as router:
        router.get(url) % dict(text="foobar")

        request = httpcore.Request(
            b"GET",
            httpcore.URL(scheme=b"https", host=b"foo.bar", port=port, target=b"/"),
        )

        with httpcore.ConnectionPool() as http:
            response = http.handle_request(request)
            body = response.read()
            assert body == b"foobar"

        async with httpcore.AsyncConnectionPool() as http:
            response = await http.handle_async_request(request)
            body = await response.aread()
            assert body == b"foobar"
コード例 #14
0
def test_request_repr():
    request = httpcore.Request("GET", "http://example.org")
    assert repr(request) == "<Request('GET', 'http://example.org')>"
コード例 #15
0
def test_request_with_invalid_method():
    with pytest.raises(TypeError) as exc_info:
        httpcore.Request(123, "https://www.example.com/")  # type: ignore
    assert str(exc_info.value) == "method must be bytes or str, but got int."
コード例 #16
0
def test_host_header():
    request = httpcore.Request("GET", "http://example.org")
    request.prepare()
    assert request.headers == httpcore.Headers([(b"host", b"example.org"),
                                                (b"accept-encoding",
                                                 b"deflate, gzip, br")])
コード例 #17
0
def test_request_with_invalid_url():
    with pytest.raises(TypeError) as exc_info:
        httpcore.Request("GET", 123)  # type: ignore
    assert str(
        exc_info.value) == "url must be a URL, bytes, or str, but got int."