خطأ في التحقق حتى عند تمرير المعلمة عند تشغيل واجهة برمجة تطبيقات مستكشف البيانات باستخدام Curl

لقد راجعت إجابات المنتدى، لكنني لا زلت غير قادر على جعل الأمر يعمل. الدالة لا تقبل معامل user_param الذي عرفته في الاستعلام.

الخطأ: Array ( [success] => [errors] => Array ( [0] => DataExplorer::ValidationError: Missing parameter user_param of type int ) )

الاستعلام:

-- [params]
-- int :user_param

SELECT Count(likes_received) total_likes_received 
from user_stats us
where us.user_id = :user_param

الكود:

<?php global $post;

$current_user_id = get_current_user_id();

$user_discourse_id = (int)get_user_meta($current_user_id,'discourse_sso_user_id')[0];
//بيانات اعتماد واجهة برمجة التطبيقات،
$api_key = 'key';
$api_username = 'name';
$post_fields = array(
    'user_param' => $user_discourse_id,
);

$headers = array("Content-Type: multipart/form-data;","Api-Key: $api_key","Api-Username: $api_username",);
$url = 'https://domain/admin/plugins/explorer/queries/9/run';
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_fields );

$result = curl_exec( $ch );
if ( curl_errno( $ch ) !== 0 ) {
    // التعامل مع الخطأ، استدعاء curl_close( $ch ) والعودة.
	echo 'error';
	curl_close ($ch);
	return;
}

curl_close( $ch );
$decoded_result = json_decode( $result, true );
print_r($decoded_result);

?>

لقد جربت توليد قيمة لـ $post_fields مع وبدون استخدام http_build_query، لكن المعامل لا يزال لا يُمرَّر إلى مستكشف البيانات.

كان هذا يعمل قبل شهر باستخدام http_build_query، والآن لم يعد يعمل. ما الذي فاتني؟

تحديث:
لقد جربت حتى تمرير المصفوفة يدويًا وما زلت أحصل على نفس الخطأ. هل حدث تغيير ما مؤخرًا في الإضافة؟

curl_setopt( $ch, CURLOPT_POSTFIELDS, array('user_param'=>'25'));
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('user_param'=> 25));

راجع كيفية تشغيل استعلامات مستكشف البيانات باستخدام واجهة برمجة تطبيقات Discourse للحصول على تفاصيل حول كيفية تعيين معامل params. بناءً على الكود الذي قدمته، يبدو أنك تحاول تمرير معامل user_param مباشرةً بدلاً من تضمينه داخل معامل params. يجب أن يمنحك المثال الأول للكود في الموضوع الذي ربطت به فكرة حول كيفية تعيين هذا المعامل.

سيمون،

لقد اطلعت على مقالتك حول واجهات برمجة التطبيقات (APIs)، لكنني أستخدم دالة curl_setopt() لإدراج المعاملات. تتطلب هذه الدالة استخدام مصفوفة. لذا حاولت ما يلي، لكنه يظهر خطأ على مستوى المنتدى.

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('params' => (array('user_param' => 25))));

$result = curl_exec( $ch );
print_r($result);

يبدو أن البيانات تُمرّر الآن، لكن المخرجات لا يتم عرضها.

أوبس

واجهت البرمجيات التي تشغل منتدى النقاش هذا مشكلة غير متوقعة. نعتذر عن الإزعاج.

تم تسجيل معلومات مفصلة حول الخطأ، وتم إنشاء إشعار تلقائي. سنقوم بمراجعة الأمر.

لا حاجة لاتخاذ أي إجراء إضافي. ومع ذلك، إذا استمرت حالة الخطأ، يمكنك تقديم تفاصيل إضافية، بما في ذلك خطوات إعادة إنتاج الخطأ، عن طريق نشر موضوع نقاش في فئة التعليقات بالموقع.

ما الذي أغفله؟

قد تتمكن من تبسيط عملية استكشاف المشكلة وحلها بمحاولة إجراء استدعاء API باستخدام طلب curl من طرفية جهاز الكمبيوتر الخاص بك أولاً. إذا تمكنت من جعل ذلك يعمل، فستعرف أن المشكلة تتعلق بكيفية إنشاء الطلب باستخدام curl_setopt.

لا أتوقع أن يؤدي إجراء استعلام Data Explorer عبر واجهة برمجة التطبيقات (API) إلى حدوث خطأ 500 على خادم موقعك. إذا كنت قادرًا على الوصول إلى الموقع، فيجب أن تجد تفاصيل حول ما حدث خطأ في سجلات الأخطاء الخاصة بموقعك (الموجودة في لوحة الإدارة / السجلات / سجلات الأخطاء).

تمكنت من العثور على المعلومات ولكنني لا أستطيع فهمها.

MultiJson::ParseError (unexpected character (after ) at line 1, column 1 [parse.c:769])
app/controllers/application_controller.rb:395:in `block in with_resolved_locale'
app/controllers/application_controller.rb:395:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:355:in `call'
config/initializers/008-rack-cors.rb:25:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:177:in `call'

بخصوص اقتراحك الأول، أنا أعمل على معرفة كيفية تشغيل أمر Curl في موجه الأوامر.

لذلك جربت الكود في الطرفية وحصلت على الخطأ التالي:

curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL

root@Discourse-for-Prowess:~# curl -X POST “https://domain/admin/plugins/explorer/queries/9/run”-H “Content-Type:multipart/form-data;”-H “Api-key:12345”-H “Api-username:username”-F ‘params={“user_param”:“25”}’

أستطيع تشغيل الاستعلام في مستكشف البيانات - لقطة شاشة.

في سجلات الأخطاء، أرى ما يلي:

ActionDispatch::Http::MimeNegotiation::InvalidType ("%{#context['com.opensymphony.xwork2.dispatcher.httpservletresponse'].addheader('90b3sfq9'" is not a valid MIME type)
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:353:in `call'
config/initializers/008-rack-cors.rb:25:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:177:in `call'

أي اقتراح سيكون مفيدًا.