R

时间:2016-11-01 07:12:23

标签: r xml soap

我现在遇到了麻烦。

我尝试使用R进行SOAP数据交换,但始终让服务器响应如下:

  

尝试210.242.163.56 ......

     

连接至210.242.163.56(210.242.163.56)端口80(#0)

     

POST / SendDigXml / HTTP / 1.1

     

主持人:210.242.163.56

     

接受:text / xml

     

接受:multipart / *

     

Content-Type:text / xml;字符集= UTF-8

     

SOAPAction:http://210.242.163.56/SendDigXml/GetLastMod

     

内容长度:397

     

上传已完全发送:397个字节中的397个

     

< HTTP / 1.1 500内部服务器错误

     

<缓存控制:私有

     

< Content-Type:text / xml;字符集= UTF-8

     

<服务器:Microsoft-IIS / 7.5

     

< X-AspNet-Version:4.0.30319

     

< X-Powered-By:ASP.NET

     

<日期:2016年11月1日星期二06:32:54 GMT

     

<内容长度:441

     

<连接:Keep-Alive

     

<年龄:0

     

<    连接#0到主机210.242.163.56保持不变

faulcode和faultstring是:

<faultcode>soap:Client</faultcode>
<faultstring>The server could not recognize the value of the HTTP header SOAPAction: http://210.242.163.56/SendDigXml/GetLastMod/.</faultstring>

我在RCurl包中使用curlPerform函数,代码如下:

library(RCurl)
id ="iamuser"
pw ="letmepass"

headerFields =
 c(Accept = "text/xml",
Accept = "multipart/*",
'Content-Type' = "text/xml; charset=utf-8",
SOAPAction = "http://210.242.163.56/SendDigXml/GetLastMod")

body = sprintf('<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetLastMod xmlns="http://210.242.163.56/SendDigXml/">
<user_id>%s</user_id>
<password>%s</password>
<county_code>%s</county_code>
<data_type>%s</data_type>
</GetLastMod>
</soap:Body></soap:Envelope>',id,pw,"Y","1") 

reader = basicTextGatherer()

getupdate<-curlPerform(url = "http://210.242.163.56/SendDigXml/",
                   httpheader = headerFields,
                   postfields = body,
                   writefunction = reader$update,
                   verbose = TRUE)
SOAPAction的值格式是按照模板的规定,也尝试了其他几种表示,但结果是一样的。我不知道还能尝试什么。有人能帮助我吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

好的,我发现了什么是错的。

SOAPAction应该是"http://tempuri.org/GetLastMod",而不是"http://210.242.163.56/SendDigXml/GetLastMod"

<GetLastMod xmlns="http://210.242.163.56/SendDigXml/">应为<GetLastMod xmlns="http://tempuri.org/">

http://210.242.163.56/SendDigXml上的示例代码相同。

我认为这是一个错误,任何训练有素的程序员都不会这样做。但我没有训练过程员...我会保留这个问题而不是删除它。我希望它可以帮助像我这样的人。