summaryrefslogtreecommitdiffstats
path: root/includes/class-cepis-woo-transport.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/class-cepis-woo-transport.php')
-rw-r--r--includes/class-cepis-woo-transport.php30
1 files changed, 29 insertions, 1 deletions
diff --git a/includes/class-cepis-woo-transport.php b/includes/class-cepis-woo-transport.php
index 888be54..b89a81c 100644
--- a/includes/class-cepis-woo-transport.php
+++ b/includes/class-cepis-woo-transport.php
@@ -24,6 +24,31 @@ defined( 'ABSPATH' ) || exit;
final class Cepis_Woo_Transport implements Cepis\Transport {
/**
+ * Body of the response to the most recent completed request.
+ *
+ * The client turns a 404 into a {@see Cepis\CepNotFoundException} and drops
+ * the body with it, which is the right shape for a library: a CEP that does
+ * not exist is an error, not a payload. The API nonetheless puts something
+ * useful in that body — the municipality the number would have belonged to —
+ * and this is the only place in the plugin that still has it.
+ *
+ * Kept here rather than handed to the client so that nothing downstream can
+ * mistake it for an address. {@see Cepis_Woo_Lookup} reads it, keeps the few
+ * fields that name a municipality, and passes them on inside the 404.
+ *
+ * @var string
+ */
+ private string $last_body = '';
+
+ /**
+ * The body of the last response, or an empty string when the last request
+ * never completed.
+ */
+ public function last_body(): string {
+ return $this->last_body;
+ }
+
+ /**
* Perform a single GET.
*
* @param string $url Absolute URL, query string included.
@@ -33,6 +58,8 @@ final class Cepis_Woo_Transport implements Cepis\Transport {
* @throws Cepis\NetworkException The request never completed.
*/
public function get( string $url, array $headers, float $timeout ): Cepis\Response {
+ $this->last_body = '';
+
$response = wp_remote_get(
$url,
array(
@@ -48,11 +75,12 @@ final class Cepis_Woo_Transport implements Cepis\Transport {
}
$response_headers = wp_remote_retrieve_headers( $response );
+ $this->last_body = (string) wp_remote_retrieve_body( $response );
return new Cepis\Response(
(int) wp_remote_retrieve_response_code( $response ),
is_object( $response_headers ) ? $response_headers->getAll() : (array) $response_headers,
- (string) wp_remote_retrieve_body( $response )
+ $this->last_body
);
}
}