问题描述
汤姆,
我正在尝试使用UTL_HTTP函数与pl/sql过程中的文件一起发布web服务。同样的处理工作从Curl脚本。
PL/SQL:
卷曲: 工作脚本
您能否帮助我如何使用utl_https/任何其他oracle函数在pl/sql中编写此curl脚本。
谢谢你的帮助。
赛鲁
我正在尝试使用UTL_HTTP函数与pl/sql过程中的文件一起发布web服务。同样的处理工作从Curl脚本。
PL/SQL:
DECLARE req utl_http.req; resp utl_http.resp; l_value VARCHAR2(1024); l_url_import VARCHAR2(500) := 'https://api.teamdynamix.com/TDWebApi/api/people'; l_url VARCHAR2(100) := 'https://api.teamdynamix.com/TDWebApi/api/auth/loginadmin'; l_content VARCHAR2(1000) := 'C:\SB\TeamDynamix\Files\xavier_to_teamdynamics.xlsx' ; BEGIN req := UTL_HTTP.begin_request( l_url, 'POST', UTL_HTTP.HTTP_VERSION_1_1 ); UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0 (compatible)' ); UTL_HTTP.SET_HEADER(req, 'Content-Type', 'application/json'); UTL_HTTP.SET_HEADER(req, 'Accept', 'application/json'); UTL_HTTP.SET_HEADER(req, 'Authorization', 'Bearer BEID: XXXXXX-XXXX-XXX-XXXXXXXX, WebServicesKey: XXXXXX-XXX-XXX-XXXXXXXX' ); --- UTL_HTTP.SET_HEADER(req, 'Content-Length', 100000000);--LENGTH(l_Content)); UTL_HTTP.WRITE_text(req, l_content); resp := utl_http.get_response(req); dbms_output.put_line('Response'); LOOP utl_http.read_line(resp, l_value, TRUE); dbms_output.put_line('Value......'||l_value); END LOOP; utl_http.end_response(resp); EXCEPTION WHEN utl_http.end_of_body THEN utl_http.end_response(resp); WHEN OTHERS THEN dbms_output.put_line('Error'); END; /复制
卷曲: 工作脚本
. $HOME/.bash_profile #file name as it will be stored in the dataload folder file=$UTLFILE/general/xavier_to_teamdynamix.xlsx #PeopleApiImportTemplate.xlsx #xavier_to_teamdynamics.xlsx #run the curl command and store the output from command in variable return_key echo "File Name: [$file]" read return_key < <(curl "https://services.xavier.edu/TDWebApi/api/auth/loginadmin" -H "Content-type: application/json" -d "{'BEID': 'XXXXXX-XXXX-XXX-XXXXXXXX', 'WebServicesKey': 'XXXXXX-XXX-XXX-XXXXXXXX'}") echo "RK [$return_key]" #build final command with file and return_key variables final_command='curl -i -F filedata=@'$file' https://services.xavier.edu/tdwebapi/api/people/import -H "Authorization: Bearer '$return_key'"' echo "Final --> [$final_command]" #eval will run the final command string and output the results eval $final_command echo " " echo " "复制
您能否帮助我如何使用utl_https/任何其他oracle函数在pl/sql中编写此curl脚本。
谢谢你的帮助。
赛鲁
专家解答
要上传文件,您需要将数据 (通常以块形式) 作为raw发送。
以下是一些 * 伪 * 代码,概述了一般方法
有很多关于这个主题的博客文章,例如
https://apexplained.wordpress.com/2016/03/21/utl_http-and-a-multipartform-data-request-body/
但是我可以建议也看看APEX_WEB_SERVICE包吗
http://docs.oracle.com/cd/E59726_01/doc.50/e39149/apex_web_service.htm#AEAPI537
这可能会为你隐藏很多这种复杂性
以下是一些 * 伪 * 代码,概述了一般方法
declare req utl_http.req; resp utl_http.resp; content blob; req_length int; offset int; begin dbms_lob.loadblobfromfile(content,bfilename('xavier_to_teamdynamix.xlsx',...); utl_http.set_header(req, 'content-type', 'image/jpeg'); req_length := dbms_lob.getlength(content); if req_length <= 32767 then utl_http.set_header(req, 'Content-Length', req_length); utl_http.write_raw(req, content); elsif req_length >32767 then utl_http.set_header(req, 'Transfer-Encoding', 'Chunked'); while (offset < req_length) loop dbms_lob.read(content, amount, offset, buffer); utl_http.write_raw(req, buffer); offset := offset + amount; end loop; end if; resp := UTL_HTTP.get_response(req);复制
有很多关于这个主题的博客文章,例如
https://apexplained.wordpress.com/2016/03/21/utl_http-and-a-multipartform-data-request-body/
但是我可以建议也看看APEX_WEB_SERVICE包吗
http://docs.oracle.com/cd/E59726_01/doc.50/e39149/apex_web_service.htm#AEAPI537
这可能会为你隐藏很多这种复杂性
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。