httr POST API 请求但缺少 xml 参数
httr POST API request but missing xml parameter
我正在尝试使用 httr
连接到 IBM Silverpop 的 XML API,但我 运行 遇到了 'missing XML parameter' 问题。我尝试使用 Silverpop 提供的测试工具来查看我发送的请求与我通过 httr
发送的请求是否不同,但没有找到任何可以帮助我的东西。
以下是我在使用测试工具时发送的XML
body成功:
<Envelope><Body>
<Login>
<USERNAME>My Email</USERNAME>
<PASSWORD>My password</PASSWORD>
</Login>
</Body></Envelope>
使用Chrome检查请求headers(使用CTRL + SHIFT + I
):
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:225
Content-Type:application/x-www-form-urlencoded
Host:api3.silverpop.com
Origin:null
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36
同样,使用 Chrome 检查 响应 headers:
Connection:Keep-Alive
Content-Type:text/xml;charset=utf-8
Date:Fri, 04 Dec 2015 12:15:34 GMT
Keep-Alive:timeout=15, max=100
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
使用httr
,我构建我的请求如下:
library(httr)
ibmUrl <- "api3.silverpop.com/XMLAPI"
body1 <- "<Envelope><Body>
<Login>
<USERNAME>My Email</USERNAME>
<PASSWORD>My password</PASSWORD>
</Login>
</Body></Envelope>"
test1 <- POST(url = ibmUrl, body = body1, verbose(), content_type("application/x-www-form-urlencoded"))
使用 verbose()
显示正在发送和接收以下内容:
-> POST /XMLAPI HTTP/1.1
-> Host: api3.silverpop.com
-> User-Agent: libcurl/7.43.0 r-curl/0.9.3 httr/1.0.0
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Type: application/x-www-form-urlencoded
-> Content-Length: 132
->
>> <Envelope><Body>
>> <Login>
>> <USERNAME>My Email</USERNAME>
>> <PASSWORD>My password</PASSWORD>
>> </Login>
>> </Body></Envelope>
<- HTTP/1.1 200 OK
<- Date: Fri, 04 Dec 2015 13:29:55 GMT
<- Server: Apache-Coyote/1.1
<- Content-Type: text/xml
<- Content-Length: 255
但是当我使用 content()
检查来自 API 的响应时,我得到以下信息:
<?xml version="1.0"?>
<Envelope>
<Body>
<RESULT>
<SUCCESS>false</SUCCESS>
</RESULT>
<Fault>
<Request/>
<FaultCode/>
<FaultString>Missing 'xml'parameter</FaultString>
<detail>
<error>
<errorid>52</errorid>
<module/>
<class>SP.API</class>
<method/>
</error>
</detail>
</Fault>
</Body>
</Envelope>
怎么会?
提前致谢。
我想我找到了答案——尽管不太清楚为什么会这样,而且我在问题中显示的最初尝试没有...
这是我的原始代码:
test1 <- POST(url = ibmUrl, body = body1,
verbose(), content_type("application/x-www-form-urlencoded"))
我只需要将 content_type 更改为 'text/xml'。
test1 <- POST(url = ibmUrl,
body = body1, verbose(), content_type("text/xml"))
它有效...但是如果有人能插话并澄清为什么这可以解决问题...将不胜感激...
我正在尝试使用 httr
连接到 IBM Silverpop 的 XML API,但我 运行 遇到了 'missing XML parameter' 问题。我尝试使用 Silverpop 提供的测试工具来查看我发送的请求与我通过 httr
发送的请求是否不同,但没有找到任何可以帮助我的东西。
以下是我在使用测试工具时发送的XML
body成功:
<Envelope><Body>
<Login>
<USERNAME>My Email</USERNAME>
<PASSWORD>My password</PASSWORD>
</Login>
</Body></Envelope>
使用Chrome检查请求headers(使用CTRL + SHIFT + I
):
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:225
Content-Type:application/x-www-form-urlencoded
Host:api3.silverpop.com
Origin:null
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36
同样,使用 Chrome 检查 响应 headers:
Connection:Keep-Alive
Content-Type:text/xml;charset=utf-8
Date:Fri, 04 Dec 2015 12:15:34 GMT
Keep-Alive:timeout=15, max=100
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
使用httr
,我构建我的请求如下:
library(httr)
ibmUrl <- "api3.silverpop.com/XMLAPI"
body1 <- "<Envelope><Body>
<Login>
<USERNAME>My Email</USERNAME>
<PASSWORD>My password</PASSWORD>
</Login>
</Body></Envelope>"
test1 <- POST(url = ibmUrl, body = body1, verbose(), content_type("application/x-www-form-urlencoded"))
使用 verbose()
显示正在发送和接收以下内容:
-> POST /XMLAPI HTTP/1.1
-> Host: api3.silverpop.com
-> User-Agent: libcurl/7.43.0 r-curl/0.9.3 httr/1.0.0
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Type: application/x-www-form-urlencoded
-> Content-Length: 132
->
>> <Envelope><Body>
>> <Login>
>> <USERNAME>My Email</USERNAME>
>> <PASSWORD>My password</PASSWORD>
>> </Login>
>> </Body></Envelope>
<- HTTP/1.1 200 OK
<- Date: Fri, 04 Dec 2015 13:29:55 GMT
<- Server: Apache-Coyote/1.1
<- Content-Type: text/xml
<- Content-Length: 255
但是当我使用 content()
检查来自 API 的响应时,我得到以下信息:
<?xml version="1.0"?>
<Envelope>
<Body>
<RESULT>
<SUCCESS>false</SUCCESS>
</RESULT>
<Fault>
<Request/>
<FaultCode/>
<FaultString>Missing 'xml'parameter</FaultString>
<detail>
<error>
<errorid>52</errorid>
<module/>
<class>SP.API</class>
<method/>
</error>
</detail>
</Fault>
</Body>
</Envelope>
怎么会?
提前致谢。
我想我找到了答案——尽管不太清楚为什么会这样,而且我在问题中显示的最初尝试没有...
这是我的原始代码:
test1 <- POST(url = ibmUrl, body = body1,
verbose(), content_type("application/x-www-form-urlencoded"))
我只需要将 content_type 更改为 'text/xml'。
test1 <- POST(url = ibmUrl,
body = body1, verbose(), content_type("text/xml"))
它有效...但是如果有人能插话并澄清为什么这可以解决问题...将不胜感激...