我无法使用 PLSQL 使用apex_web_service.make_rest_request()
成功获得 POST/身份验证/登录 E-verify/DHS . 我首先在 Apex 中尝试,但出现数字/值错误并切换到 PLSQL 进行调试。 它使用 json。 顶点版本是4.2。 我可以让 GET 工作,但这不使用标题或 parms。
- 如果使用
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"}
- 如果我指定
p_body
则会收到ORA-06502:PL/SQL:数字或值错误。 - 如果我指定
p_body
但使用了错误的密码,我会得到(我认为是(非 ascii 响应,如下所示: - 如果我在各个地方使用 varchar2 而不是 clob,我会收到相同的错误
- 如果我使用相同的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;