如何通过HTTP Post事务将XML检索到Oracle PL/SQL中?

如何通过HTTP Post事务将XML检索到Oracle PL/SQL中?,oracle,web-services,plsql,mod-plsql,Oracle,Web Services,Plsql,Mod Plsql,我正在尝试使用BloggerAPI实现Flickr中的“blog this”函数,并将其应用到基于pl/sql的CMS中 当Flickr向我发送过账事务时,HTTP事务如下所示: POST /pls/website/!pkg.procAPI HTTP/1.1 Host: www.mydomain.com Accept: */* User-Agent: Flickr Content-Type: text/xml; charset=utf-8 Content-Length: 1220 Expect:

我正在尝试使用BloggerAPI实现Flickr中的“blog this”函数,并将其应用到基于pl/sql的CMS中

当Flickr向我发送过账事务时,HTTP事务如下所示:

POST /pls/website/!pkg.procAPI HTTP/1.1
Host: www.mydomain.com
Accept: */*
User-Agent: Flickr
Content-Type: text/xml; charset=utf-8
Content-Length: 1220
Expect: 100-continue

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
    <methodName>blogger.newPost</methodName>
    <params>
        <param><value><string>NO_APP_KEY</string></value></param>
        <param><value><string>1</string></value></param>
        <param><value><string>markj</string></value></param>
        <param><value><string>markj</string></value></param>
        <param><value><string>This is a test post from &lt;a href=&quot;http://www.flickr.com/r/testpost&quot;&gt;&lt;img alt=&quot;flickr&quot; src=&quot;http://www.flickr.com/images/flickr_logo_blog.gif&quot; width=&quot;41&quot; height=&quot;18&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; /&gt;&lt;/a&gt;, a fancy photo sharing thing.</string></value></param>
        <param><value><boolean>1</boolean></value></param>
    </params>
</methodCall>
POST/pls/website/!pkg.procAPI HTTP/1.1
主持人:www.mydomain.com
接受:*/*
用户代理:Flickr
内容类型:text/xml;字符集=utf-8
内容长度:1220
预期:100人继续
blogger.newPost
没有应用程序密钥
1.
马克
马克
这是来自a href=”的测试帖子http://www.flickr.com/r/testpost“img alt=“flickr”src=”http://www.flickr.com/images/flickr_logo_blog.gif“width=“41”height=“18”border=“0”align=“absmiddle”//a,一款别致的照片共享产品。
1.
但是我的服务器正在响应一个HTTP-400错误请求,错误消息是“签名不匹配或缺少“=”,我的pl/sql过程从来没有机会处理该请求。我怀疑,在查看消息时,灵活的参数传递被忽略了,但我不知道还有其他方法

获取可用博客的过程似乎正常,但请求的内容并不包含所有html实体作为消息的一部分:

    POST /pls/website/!pkg.procAPI HTTP/1.1
Host: www.mydomain.com
Accept: */*
User-Agent: Flickr
Content-Type: text/xml; charset=utf-8
Content-Length: 304

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
    <methodName>blogger.getUsersBlogs</methodName>
    <params>
        <param><value><string>NO-APP-KEY</string></value></param>
        <param><value><string>mark</string></value></param>
        <param><value><string>markj</string></value></param>
    </params>
</methodCall>
POST/pls/website/!pkg.procAPI HTTP/1.1
主持人:www.mydomain.com
接受:*/*
用户代理:Flickr
内容类型:text/xml;字符集=utf-8
内容长度:304
blogger.getUsersBlogs
无应用程序密钥
做记号
马克
有没有办法直接从http请求体获取xml数据?或者其他我正在寻找的方法

谢谢,
马克

使用UTL\U HTTP

您可以使用UTL_HTTP包来实现这一点

UTL_HTTP.read_text(
   r     IN OUT NOCOPY resp,
   data  OUT NOCOPY VARCHAR2,
   len   IN PLS_INTEGER DEFAULT NULL);
UTL_HTTP包支持HTTP 1.1分块传输编码。当响应正文以响应标头中指示的分块传输编码格式返回时,该包自动解码分块并以反分块格式返回响应正文


我遇到了MojoMark遇到的相同问题(尽管使用了不同的外部应用程序)。MojoMark的后续评论是正确的,阅读文本信息没有回答问题

像MojoMark一样,我试图从外部实体接收帖子。我尝试编写的PLSQL是接收并存储该帖子

我能够毫无问题地编写出站POST XML,但无法设置接收过程

问题似乎是PLSQL过程需要一个变量名,即: ,张贴“data='data'”

但是,POST的主体只是一个XML数据流,没有为参数赋值的“=”,因此函数会得到“不匹配或缺少“=””错误

似乎应该有一种方法告诉MODPLSQL只接受post数据,就像一个“典型”的函数调用一样,但我认为我遗漏了一些明显的东西

我试图用来接收帖子的基本功能是: 过程testload(clob中的数据)为 开始 htp.print('Input POST stream was'| | DATA)

end testload;

我能看到的两个请求之间唯一的显著区别是“Expect:100 continue”业务。这似乎是HTTP 1.1规范中的一个条款,它允许客户端将请求一分为二。基本上,客户端将头发送到服务器,服务器必须做出选择。如果“满意”“对于标头,它将给出HTTP 100响应,以指示消息的其余部分将被接受

由于您从Flickr获取数据,我不确定您对客户端发出的http请求的控制级别。从服务器端来说,可能需要对Apache进行配置更改,或者可能是mod_plsql中出现了一个带有“!”灵活参数标记的错误


不管怎样,当前的BloggerAPI都不是这样的。您可能应该转向新的GDataAPI。

我向Oracle打开了一个服务请求,他们确认mod_plsql不支持检索httpheader变量。以下是我对SR的讨论:

问题分析 我需要确认一下,但Mark conclusion到目前为止对我来说是正确的,即MOD_PLSQL始终在调用和处理PLSQL过程,并且没有办法读取原始HTTP请求,因为MOD_PLSQL解析请求并检查是否有具有此名称的PLSQL过程以及是否有要传递的参数。如果没有要传递的参数,但我们提供了XML文档之类的其他内容,MODPLSQL会感到困惑,并认为这是一对新的参数和值,而事实并非如此

答复 不,这是不可能的,因为MOD_PLSQL只处理带有参数的请求,这些参数可以解析并转换为带有多个参数的PLSQL过程调用。MOD_PLSQL没有包含整个请求的“httprequest”变量的概念,就像java拥有httprequest对象一样

问题分析
得到确认,除非我们将其作为参数传递,否则我们无法从MOD_PLSQL读取它。换句话说,如果我们在HTTP请求正文中传递XML页面,我们需要使用类似java的东西,在那里我们可以在原始模式下处理请求,并且可以读取任何HTTP头和HTTP正文,而不受任何限制。

XML可以作为文件附件发送吗?换言之,改变:


内容类型:text/xml;字符集=utf-8


内容类型:多部分/表单数据,边界=AaB03x

然后在xml之前添加以下内容:


--AaB03x
内容配置:表单数据;name=“xmlfile”;filename=“myfile.xml”
内容类型:text/xml

在xml之后:

--AaB03x--
现在,您设置了文件上载过程,如本文所述:

你在flickr和pl/sql之间使用的是什么机制?我已经安装了Wireshark,并且已经安装好了