포럼 답변을 찾아봤지만 여전히 작동하지 않습니다. 쿼리에서 정의한 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 credentials,
$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 ) {
// Handle error, call curl_close( $ch ) and return.
echo 'error';
curl_close ($ch);
return;
}
curl_close( $ch );
$decoded_result = json_decode( $result, true );
print_r($decoded_result);
?>
http_build_query를 사용하고 사용하지 않는 두 가지 방식으로 $post_fields 값을 생성해 봤지만 여전히 매개변수가 데이터 탐색기(Data Explorer )로 전달되지 않습니다.
한 달 전에는 http_build_query를 사용할 때 잘 작동했는데 지금은 작동하지 않습니다. 무엇을 놓치고 있는 걸까요?
업데이트:
배열을 수동으로 전달해 보기도 했는데 여전히 동일한 오류가 발생합니다. 최근에 플러그인에 변경 사항이 있었을까요?
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('user_param'=>'25'));
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('user_param'=> 25));
simon
5월 24, 2021, 8:07오후
2
params 매개변수를 어떻게 설정해야 하는지에 대한 자세한 내용은 Discourse API로 Data Explorer 쿼리 실행 방법 을 참고해 주세요. 제공해 주신 코드를 보면, params 매개변수에 포함하는 대신 user_param을 직접 전달하려는 것으로 보입니다. 제가 링크한 토픽의 첫 번째 코드 예제를 참고하시면 해당 매개변수를 설정하는 방법에 대한 힌트를 얻을 수 있을 것입니다.
Simon,
API에 관한 글을 확인해 보았는데요, 저는 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);
데이터가 전달되는 것 같긴 한데, 출력이 렌더링되지 않습니다.
오류
이 토론 포럼을 구동하는 소프트웨어에서 예상치 못한 문제가 발생했습니다. 불편을 드려 죄송합니다.
오류에 대한 자세한 정보는 기록되었으며, 자동 알림이 생성되었습니다. 확인해 보겠습니다.
추가 조치는 필요하지 않습니다. 다만, 오류 상태가 지속되면 오류 재현 단계를 포함한 추가 세부 정보를 사이트의 피드백 카테고리에 토론 주제를 게시하여 제공하실 수 있습니다.
무엇을 놓치고 있는 걸까요?
simon
5월 24, 2021, 9:11오후
4
컴퓨터 터미널에서 curl 요청을 통해 API 호출을 먼저 시도해 보면 문제를 디버깅하는 것이 더 쉬울 수 있습니다. 이렇게 하면 요청이 정상적으로 작동하는지 확인할 수 있으며, 작동한다면 문제가 curl_setopt를 사용하여 요청을 생성하는 방식과 관련이 있다는 것을 알 수 있습니다.
API를 통해 Data Explorer 쿼리를 실행하는 것이 사이트 서버에서 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”}’
데이터 탐색기(data explorer )에서는 쿼리를 실행할 수 있습니다 - 스크린샷 .
오류 로그에서는 다음과 같은 내용을 확인할 수 있습니다:
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'
도움이 될 만한 제안이 있다면 알려주세요.