apex_web_service.make_rest_request POST 具有错误的 json 或返回 ORA-0



我无法使用 PLSQL 使用apex_web_service.make_rest_request()成功获得 POST/身份验证/登录 E-verify/DHS . 我首先在 Apex 中尝试,但出现数字/值错误并切换到 PLSQL 进行调试。 它使用 json。 顶点版本是4.2。 我可以让 GET 工作,但这不使用标题或 parms。

  1. 如果使用string_to_table()指定p_parm_name或通过单独指定每个数组值来指定p_parm_name,那么我会得到{"status":400,"error":"There was a problem in the JSON you submitted: ActionDispatch::Http::Parameters::ParseError"}
  2. 如果我指定p_body则会收到ORA-06502:PL/SQL:数字或值错误。
  3. 如果我指定p_body但使用了错误的密码,我会得到(我认为是(非 ascii 响应,如下所示:
  4. 如果我在各个地方使用 varchar2 而不是 clob,我会收到相同的错误
  5. 如果我使用相同的p_body邮递员,那么它可以工作!!

所以当然,我希望这段代码能够工作,但取而代之的是,我如何看到来自 Oracle/Apex 的请求,以便我可以确认 json 的样子(对于上面的 #1(? 谢谢!

这是代码。

l_parm_names  apex_application_global.vc_arr2;  
l_parm_values apex_application_global.vc_arr2;   
l_resp_clob        clob;
l_resp_length      integer;
l_body_varchar2    varchar2(4000);
l_body_clob        clob;
begin  
l_parm_names(1) := 'username';  
l_parm_values(1) := 'user1234';  
l_parm_names(2) := 'password';  
l_parm_values(2) := 'pass1234';
l_body_varchar2  := '{"username":"user1234","password":"pass1234"}';
l_body_clob      := to_clob(l_body_varchar2);
apex_web_service.g_request_headers.delete();
apex_web_service.g_request_headers(1).name := 'Content-Type';  
apex_web_service.g_request_headers(1).value := 'application/json';
l_resp_clob := apex_web_service.make_rest_request(
p_url => 'https://stage-everify*******login',  
p_http_method => 'POST',
--         p_parm_name => apex_util.string_to_table('username:password'),
--         p_parm_value => apex_util.string_to_table('user1234:pass1234')
--         p_parm_name => l_parm_names,
--         p_parm_value => l_parm_values
p_body => l_body_clob
);   
INSERT INTO ev_clob (body, resp, dte, note)
VALUES (l_body_clob, l_resp_clob, SYSDATE, 'Stack Script 1');  commit;
end;

你需要以这种方式生成 json

SET SERVEROUTPUT ON
DECLARE
l_cursor SYS_REFCURSOR;
BEGIN
OPEN l_cursor FOR
SELECT e.empno AS "employee_number",
e.ename AS "employee_name",
e.deptno AS "department_number"
FROM   emp e
WHERE  rownum <= 2;
APEX_JSON.initialize_clob_output;
APEX_JSON.open_object;
APEX_JSON.write('employees', l_cursor);
APEX_JSON.close_object;
DBMS_OUTPUT.put_line(APEX_JSON.get_clob_output);
APEX_JSON.free_output;
END;
/

在这里您可以找到更多信息 https://docs.oracle.com/cd/E59726_01/doc.50/e39149/apex_json.htm#AEAPI29737

BEGIN
apex_json.open_object; -- {
apex_json.open_object('obj'); -- "obj": {
apex_json.write('obj-attr', 'value'); -- "obj-attr": "value"
apex_json.close_all; -- }}
END;

相关内容

  • 没有找到相关文章

最新更新