MCPcopy Create free account
hub / github.com/apify/crawlee-python / crawl

Method crawl

src/crawlee/http_clients/_httpx.py:144–182  ·  view source on GitHub ↗
(
        self,
        request: Request,
        *,
        session: Session | None = None,
        proxy_info: ProxyInfo | None = None,
        statistics: Statistics | None = None,
        timeout: timedelta | None = None,
    )

Source from the content-addressed store, hash-verified

142
143 @override
144 async def crawl(
145 self,
146 request: Request,
147 *,
148 session: Session | None = None,
149 proxy_info: ProxyInfo | None = None,
150 statistics: Statistics | None = None,
151 timeout: timedelta | None = None,
152 ) -> HttpCrawlingResult:
153 client = self._get_client(proxy_info.url if proxy_info else None)
154 headers = self._combine_headers(request.headers)
155
156 http_request = client.build_request(
157 url=request.url,
158 method=request.method,
159 headers=headers,
160 content=request.payload,
161 cookies=session.cookies.jar if session else None,
162 extensions={'crawlee_session': session if self._persist_cookies_per_session else None},
163 timeout=timeout.total_seconds() if timeout is not None else httpx.USE_CLIENT_DEFAULT,
164 )
165
166 try:
167 response = await client.send(http_request)
168 except httpx.TimeoutException as exc:
169 raise asyncio.TimeoutError from exc
170 except httpx.TransportError as exc:
171 if self._is_proxy_error(exc):
172 raise ProxyError from exc
173 raise
174
175 if statistics:
176 statistics.register_status_code(response.status_code)
177
178 request.loaded_url = str(response.url)
179
180 return HttpCrawlingResult(
181 http_response=_HttpxResponse(response),
182 )
183
184 @override
185 async def send_request(

Callers

nothing calls this directly

Calls 6

_get_clientMethod · 0.95
_combine_headersMethod · 0.95
_is_proxy_errorMethod · 0.95
HttpCrawlingResultClass · 0.90
_HttpxResponseClass · 0.85
register_status_codeMethod · 0.80

Tested by

no test coverage detected