change curl to wp_remote_post

This commit is contained in:
spirit 2019-11-25 23:47:56 +08:00
parent db7bb49397
commit 19779aa407
1 changed files with 140 additions and 133 deletions

View File

@ -17,8 +17,7 @@ add_action('rest_api_init', function () {
/**
* Image uploader response
*/
function upload_image(WP_REST_Request $request)
{
function upload_image(WP_REST_Request $request) {
// see: https://developer.wordpress.org/rest-api/requests/
// handle file params $file === $_FILES
@ -29,7 +28,7 @@ function upload_image(WP_REST_Request $request)
* https://dev.2heng.xin/wp-json/sakura/v1/image/upload
*/
// $file = $request->get_file_params();
if ( !check_ajax_referer('wp_rest', '_wpnonce', false) ) {
if (!check_ajax_referer('wp_rest', '_wpnonce', false)) {
$output = array(
'status' => 403,
'success' => false,
@ -65,23 +64,17 @@ function upload_image(WP_REST_Request $request)
/**
* Chevereto upload interface
*/
function Chevereto_API($image)
{
$fields = array(
function Chevereto_API($image) {
$upload_url = akina_option('cheverto_url').'/api/1/upload';
$args = array(
'body' => array(
'source' => base64_encode($image),
'key' => akina_option('chevereto_api_key')
)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, akina_option('cheverto_url').'/api/1/upload');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
$reply = curl_exec($ch);
curl_close($ch);
$reply = json_decode($reply);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
if ($reply->status_txt == 'OK' && $reply->status_code == 200) {
$status = 200;
@ -109,21 +102,20 @@ function Chevereto_API($image)
/**
* Imgur upload interface
*/
function Imgur_API($image)
{
function Imgur_API($image) {
$client_id = akina_option('imgur_client_id');
$upload_url = akina_option('imgur_upload_image_proxy');
$args = array(
'headers' => array(
'Authorization' => 'Client-ID ' . $client_id
),
'body' => array(
'image' => base64_encode($image)
)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, akina_option('imgur_upload_image_proxy'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id));
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image)));
$reply = curl_exec($ch);
curl_close($ch);
$reply = json_decode($reply);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
if ($reply->success && $reply->status == 200) {
$status = 200;
@ -151,25 +143,38 @@ function Imgur_API($image)
/**
* smms upload interface
*/
function SMMS_API($image)
{
function SMMS_API($image) {
$client_id = akina_option('smms_client_id');
$upload_url = "https://sm.ms/api/v2/upload";
$filename = $image['cmt_img_file']['name'];
$filedata = $image['cmt_img_file']['tmp_name'];
$filesize = $image['cmt_img_file']['size'];
$Boundary = wp_generate_password();
$bits = file_get_contents($filedata);
$url = "https://sm.ms/api/v2/upload";
$headers = array();
array_push($headers, "Content-Type: multipart/form-data");
array_push($headers, "Content-Type: multipart/form-data; boundary=$Boundary");
array_push($headers, "Authorization: Basic " . $client_id);
array_push($headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97");
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$mimetype = $finfo->file($filedata);
$fields = array();
array_push($fields, "--" . $Boundary);
array_push($fields, "Content-Disposition: form-data; name=\"smfile\"; filename=\"$filename\"");
array_push($fields, '');
array_push($fields, $bits);
array_push($fields, '');
array_push($fields, "--" . $Boundary . "--");
$fields = implode("\r\n", $fields);
$fields = array('smfile' => curl_file_create($filedata, $mimetype, $filename));
$args = array(
'headers' => $headers,
'body' => $fields
);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
/**
* php curl
*
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
@ -183,6 +188,7 @@ function SMMS_API($image)
curl_close($ch);
$reply = json_decode($reply);
*/
if ($reply->success && $reply->code == 'success') {
$status = 200;
@ -191,7 +197,8 @@ function SMMS_API($image)
$link = $reply->data->url;
$proxy = akina_option('cmt_image_proxy') . $link;
} else if (preg_match("/Image upload repeated limit/i", $reply->message, $matches)) {
$status = 200; // sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code并单独把 url 放进一个字段
$status = 200;
// sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code并单独把 url 放进一个字段
$success = true;
$message = $reply->message;
$link = str_replace('Image upload repeated limit, this image exists at: ', '', $reply->message);
@ -218,8 +225,7 @@ function SMMS_API($image)
* @rest api接口路径https://sakura.2heng.xin/wp-json/sakura/v1/cache_search/json
* @可在cache_search_json()函数末尾通过设置 HTTP header 控制 json 缓存时间
*/
function cache_search_json()
{
function cache_search_json() {
$vowels = array("[", "{", "]", "}", "<", ">", "\r\n", "\r", "\n", "-", "'", '"', '`', " ", ":", ";", '\\', " ", "toc");
$regex = <<<EOS
/<\/?[a-zA-Z]+("[^"]*"|'[^']*'|[^'">])*>|begin[\S\s]*\/begin|hermit[\S\s]*\/hermit|img[\S\s]*\/img|{{.*?}}|:.*?:/m
@ -263,7 +269,8 @@ EOS;
$data = '[' . $output . ']';
$result = new WP_REST_Response(json_decode($data), 200);
$result->set_headers(array('Content-Type' => 'application/json',
'Cache-Control' => 'max-age=3600')); // json 缓存控制
'Cache-Control' => 'max-age=3600'));
// json 缓存控制
return $result;
}