【问题标题】:How to sent a POST request as json in plsql如何在pl sql中将POST请求作为json发送
【发布时间】:2014-07-19 08:00:34
【问题描述】:

我有以下用于发布 plsql json 请求的基本代码。正在执行的 web 服务没有任何响应,因为它只是为了执行某个任务。 但是每次执行该块时,我都会从 Apache Tomcat 获得状态代码 400。 我哪里错了?

declare
  http_resp utl_http.resp;
  http_req utl_http.req;
  json_msg VARCHAR2(500);
begin

  http_req := utl_http.begin_request('http://192.168.1.194:8080/NotificationApp/sendNotification.rest', 'POST');
  utl_http.set_body_charset(http_req, 'UTF-8');
  utl_http.set_header(http_req, 'Content-Type', 'application/json');

    json_msg := '{"code":100,"id": "APA91bFSmD_gBsUwP_hraRZL20mt8p4ejGn5fC7tlciINT50Ad8oIod2T-64GVk_8rrjoqXGEpYuRcoQogG0L7aOKIjeeisTcmHiUUONbnZzn4_u0ED7QD_iNeVkh2RU8Pa-HBHwgJUgOT-TyvlM9hB4Yn9fvWER","data": "alert alert"}';

  utl_http.write_text(http_req, dbms_lob.substr(json_msg,dbms_lob.getLength(json_msg),1));

 http_resp := utl_http.get_response(http_req);

  if (http_resp.status_code >= 400) and
            (http_resp.status_code <= 499)
        then
        dbms_output.put_line(http_resp.status_code);

        end if;

  utl_http.end_response(http_resp);

end;

提前致谢

【问题讨论】:

    标签: json post plsql http-post httprequest


    【解决方案1】:

    经过大量搜索,我从blog 获得了以下代码。适合我。

    declare
    req utl_http.req;
    res utl_http.resp;
    url varchar2(4000) := 'http://192.168.1.194:8080/NotificationApp/sendNotification.rest';
    name varchar2(4000);
    buffer varchar2(4000); 
    content varchar2(4000) := '{"code":100,"id": "APA91bFSmD_gBsUwO_hraRZL20mt8p4ejGn5fC7tlciINT50Ad8oIod2T-64GVk_8rProqXGEpYuDcoQogG0L7a0TuyeeisTcmHiUUONbnZzn4_u0ED7QD_iNeVkh1ZgU8Pa-HRtfgJUgOT-TyvlM9hB4Yn9fvOPud","data": "alert alert"}';
    
    begin
    
    req := utl_http.begin_request(url, 'POST',' HTTP/1.1');
    utl_http.set_header(req, 'user-agent', 'mozilla/4.0'); 
    utl_http.set_header(req, 'content-type', 'application/json'); 
    utl_http.set_header(req, 'Content-Length', length(content));
    
    utl_http.write_text(req, content);
    
    res := utl_http.get_response(req);
    
        begin
        loop
        utl_http.read_line(res, buffer);
        dbms_output.put_line(buffer);
    
        end loop;
        utl_http.end_response(res);
        exception
        when utl_http.end_of_body then
        utl_http.end_response(res);
        end;
    end;
    

    【讨论】:

    • 有什么办法让它异步?
    • @prince 如何获取我的 PHP 页面中的内容?
    【解决方案2】:

    现在,我需要更改行 req := utl_http.begin_request(url, 'POST',' HTTP/1.1');

    我做过并工作过: req := utl_http.begin_request(url, 'POST');

    【讨论】:

      【解决方案3】:

      我从Jeff得到了这个很好的答案

      从 Oracle 18.3+ 开始,您可以使用 :body_text。因此,如果您有一些 JSON 类型的列 example,您可以简单地 SET example=:body_text

      【讨论】:

        猜你喜欢
        • 2020-06-17
        • 1970-01-01
        • 1970-01-01
        • 2016-03-28
        • 1970-01-01
        • 2016-11-03
        • 2017-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多