Update UrlRequests with patch, admin test page for it

Also update delete to have optional body (content)
This commit is contained in:
Clemens Schwaighofer
2024-10-28 17:05:49 +09:00
parent f781b5e55f
commit 1bff19f4b6
4 changed files with 169 additions and 12 deletions

View File

@@ -0,0 +1,35 @@
<?php
// url requests target test
require 'config.php';
use CoreLibs\Convert\Json;
$LOG_FILE_ID = 'classTest-urlrequests-target';
$log = new CoreLibs\Logging\Logging([
'log_folder' => BASE . LOG,
'log_file_id' => $LOG_FILE_ID,
'log_per_date' => true,
]);
$http_headers = array_filter($_SERVER, function ($value, $key) {
if (str_starts_with($key, 'HTTP_')) {
return true;
}
}, ARRAY_FILTER_USE_BOTH);
$file_get = file_get_contents('php://input');
// str_replace('\"', '"', trim($file_get, '"'));
$log->debug('SERVER', $log->prAr($_SERVER));
$log->debug('HEADERS', $log->prAr($http_headers));
$log->debug('POST', $log->prAr($_POST));
$log->debug('PHP-INPUT', $log->prAr($file_get));
print Json::jsonConvertArrayTo([
'HTTP_HEADERS' => $http_headers,
"_GET" => $_GET,
"_POST" => Json::jsonConvertToArray($file_get),
]);
$log->debug('[END]', '=========================================>');
// __END__

View File

@@ -35,13 +35,88 @@ print "<body>";
print '<div><a href="class_test.php">Class Test Master</a></div>';
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
$url = 'https://soba.egplusww.jp';
$data = $client->requestGet($url, []);
print "<hr>";
$data = $client->requestGet(
'https://soba.egplusww.jp/developers/clemens/core_data/php_libraries/trunk/www/admin/UrlReqeusts.target.php'
. '?other=get_a',
['test-header: ABC', 'request-type: _GET'],
['foo' => 'BAR']
);
print "_GET RESPONSE: <pre>" . print_r($data, true) . "</pre>";
print "<hr>";
print "RESPONSE: <pre>" . print_r($data, true) . "</pre>";
$data = $client->requestPost(
'https://soba.egplusww.jp/developers/clemens/core_data/php_libraries/trunk/www/admin/UrlReqeusts.target.php'
. '?other=post_a',
['payload' => 'data post'],
[
'Content-Type: application/json',
'Accept: application/json',
'test-header: ABC',
'info-request-type: _POST'
],
['foo' => 'BAR post'],
);
print "_POST RESPONSE: <pre>" . print_r($data, true) . "</pre>";
print "<hr>";
$data = $client->requestPut(
'https://soba.egplusww.jp/developers/clemens/core_data/php_libraries/trunk/www/admin/UrlReqeusts.target.php'
. '?other=put_a',
['payload' => 'data put'],
[
'Content-Type: application/json',
'Accept: application/json',
'test-header: ABC',
'info-request-type: _PUT'
],
['foo' => 'BAR put'],
);
print "_PUT RESPONSE: <pre>" . print_r($data, true) . "</pre>";
print "<hr>";
$data = $client->requestPatch(
'https://soba.egplusww.jp/developers/clemens/core_data/php_libraries/trunk/www/admin/UrlReqeusts.target.php'
. '?other=patch_a',
['payload' => 'data patch'],
[
'Content-Type: application/json',
'Accept: application/json',
'test-header: ABC',
'info-request-type: _PATCH'
],
['foo' => 'BAR patch'],
);
print "_PATCH RESPONSE: <pre>" . print_r($data, true) . "</pre>";
print "<hr>";
$data = $client->requestDelete(
'https://soba.egplusww.jp/developers/clemens/core_data/php_libraries/trunk/www/admin/UrlReqeusts.target.php'
. '?other=delete_no_body_a',
null,
[
'Content-Type: application/json',
'Accept: application/json',
'test-header: ABC',
'info-request-type: _DELETE'
],
['foo' => 'BAR delete'],
);
print "_DELETE RESPONSE: <pre>" . print_r($data, true) . "</pre>";
$data = $client->requestDelete(
'https://soba.egplusww.jp/developers/clemens/core_data/php_libraries/trunk/www/admin/UrlReqeusts.target.php'
. '?other=delete_body_a',
['payload' => 'data delete'],
[
'Content-Type: application/json',
'Accept: application/json',
'test-header: ABC',
'info-request-type: _DELETE'
],
['foo' => 'BAR delete'],
);
print "_DELETE RESPONSE: <pre>" . print_r($data, true) . "</pre>";
print "</body></html>";

View File

@@ -15,7 +15,11 @@ use CoreLibs\Convert\Json;
class Curl implements Interface\RequestsInterface
{
/** @var array<string> all the valid request type */
private const VALID_REQUEST_TYPES = ["get", "post", "put", "delete"];
private const VALID_REQUEST_TYPES = ["get", "post", "put", "patch", "delete"];
/** @var array<string> list of requests type that are set as custom in the curl options */
private const CUSTOM_REQUESTS = ["put", "patch", "delete"];
/** @var array<string> list of requests types that have _POST type fields */
private const HAVE_POST_FIELDS = ["post", "put", "patch", "delete"];
/** @var int error bad request */
public const HTTP_BAD_REQUEST = 400;
/** @var int error not authorized Request */
@@ -143,10 +147,10 @@ class Curl implements Interface\RequestsInterface
// for post we set POST option
if ($type == "post") {
curl_setopt($handle, CURLOPT_POST, true);
} elseif (in_array($type, ["put", "delete"])) {
} elseif (in_array($type, self::CUSTOM_REQUESTS)) {
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, strtoupper($type));
}
if (in_array($type, ["post", "put"]) && !empty($params)) {
if (in_array($type, self::HAVE_POST_FIELDS) && !empty($params)) {
curl_setopt($handle, CURLOPT_POSTFIELDS, $params);
}
// run curl execute
@@ -386,19 +390,55 @@ class Curl implements Interface\RequestsInterface
}
/**
* Makes an request to the target url via curl: DELETE
* Makes an request to the target url via curl: PATCH
* Returns result as string (json)
*
* @param string $url The URL being requested,
* including domain and protocol
* @param string|array<string,mixed> $payload String to pass on as POST
* @param array<string> $headers [default=[]] Headers to be used in the request
* @param null|string|array<string,mixed> $query [default=null] Optinal query parameters, array will be converted
* @return array{code:string,content:string} Result code and content as array, content is json
*/
public function requestPatch(
string $url,
string|array $payload,
array $headers = [],
null|string|array $query = null
): array {
return $this->curlRequest(
"patch",
$this->convertQuery($url, $query),
$headers,
$this->convertPayloadData($payload)
);
}
/**
* Makes an request to the target url via curl: DELETE
* Returns result as string (json)
* Note that DELETE payload is optional
*
* @param string $url The URL being requested,
* including domain and protocol
* @param null|string|array<string,mixed> $payload [default=null] Data to pass on as POST
* @param array<string> $headers [default=[]] Headers to be used in the request
* @param null|string|array<string,mixed> $query [default=null] String to pass on as GET,
* if array will be converted
* @return array{code:string,content:string} Result code and content as array, content is json
*/
public function requestDelete(string $url, array $headers = [], null|string|array $query = null): array
{
return $this->curlRequest("delete", $this->convertQuery($url, $query), $headers);
public function requestDelete(
string $url,
null|string|array $payload = null,
array $headers = [],
null|string|array $query = null
): array {
return $this->curlRequest(
"delete",
$this->convertQuery($url, $query),
$headers,
$payload !== null ? $this->convertPayloadData($payload) : null
);
}
}

View File

@@ -63,15 +63,22 @@ interface RequestsInterface
/**
* Makes an request to the target url via curl: DELETE
* Returns result as string (json)
* Note that DELETE payload is optional
*
* @param string $url The URL being requested,
* including domain and protocol
* @param null|string|array<string,mixed> $payload [default=null] Data to pass on as POST
* @param array<string> $headers [default=[]] Headers to be used in the request
* @param null|string|array<string,mixed> $query [default=null] String to pass on as GET,
* if array will be converted
* @return array{code:string,content:string} Result code and content as array, content is json
*/
public function requestDelete(string $url, array $headers = [], null|string|array $query = null): array;
public function requestDelete(
string $url,
null|string|array $payload = null,
array $headers = [],
null|string|array $query = null
): array;
}
// __END__