我无法通过使用apex_web_service.make_rest_request()
的PLSQL使用E-verify/DHS成功进行POST /身份验证/登录。我首先在Apex中尝试,但出现数字/值错误,并切换到PLSQL进行调试。它使用json。Apex版本是4.2。我可以使用GET,但它不使用标头或参数。
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"}
1.如果指定p_body
,则会得到ORA-06502:PL/SQL:数字或值错误。
1.如果我指定了p_body
但使用了错误的密码,我会得到(我认为是)如下的非ascii响应:
1.如果我在不同的地方使用varchar 2而不是clob,我会得到相同的错误
1.如果我用同样的p_body来使用postman,那么它就能工作!!
所以我当然希望这段代码能正常工作,但是作为替代,我如何看到来自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;
1条答案
按热度按时间goucqfw61#
您需要以这种方式生成json。
您可以在此找到更多信息https://docs.oracle.com/cd/E59726_01/doc.50/e39149/apex_json.htm#AEAPI29737