我正在编写一个oracle过程来对某个URL发出请求。有了这个帖子请求,我必须发送一些表单变量。在API文档中,他们说他们在jquery + javascript中给出了示例。参见:
var variables = {
username: "username",
password: "password"
};
var jsonString = JSON.stringify(variables);
jQuery.post(
"https://sandbox.api.cso20.net/v1/jobapi/getApiKey.json",
{args: jsonString},
function (data) {console.log(data);}
);
我知道如何使用utl_http在PL SQL中发出http请求,并为https设置钱包。但我现在设置的唯一标题是:
utl_http.set_header(r => l_req, name => 'User-Agent', value => 'Mozilla/4.0');
我理解表单信息应该以某种方式与帖子一起发送(标题或正文不确定)。但我真的可以使用一些帮助,因为我在互联网上找不到任何例子。我试过这个:
p_param_value = 'args={"username":"user","password":"pass"}';
l_param_length := length(p_param_value);
utl_http.set_header(r => l_req,
name => 'Content-Length',
value => l_param_length);
utl_http.write_text (r => l_req,
data => p_param_value);
但不幸的是,这不起作用。非常感谢任何帮助。
凯文
答案 0 :(得分:4)
根据utl_http documentation,您必须在begin_request中指定POST方法:
req := UTL_HTTP.BEGIN_REQUEST (url=>the_url, method=>'POST');
UTL_HTTP.SET_HEADER (r => req,
name => 'Content-Type',
value => 'application/x-www-form-urlencoded');
UTL_HTTP.SET_HEADER (r => req,
name => 'Content-Length',
value =>' <length of data posted in bytes>');
UTL_HTTP.WRITE_TEXT (r => req,
data => 'p1 = value1&p2=value2...');
resp := UTL_HTTP.GET_RESPONSE (r => req);