R: httr SOAP POST-запрос для xml ошибка возврата - «тип носителя не поддерживается» - PullRequest
1 голос
/ 30 января 2020

Я пытаюсь использовать R скрипт для выполнения запроса SOAP. Ожидается xml ответ файла. Запрос POST возвращает ошибку 415. Я изо всех сил пытаюсь сформулировать это прямо в R.

Я пытался в httr:

library(httr)
library(xml2)
library(RCurl)


headers = "{'content-type': 'text/xml'}"  #Also tried'application/xml; charset=utf-8'}"
body = '<?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>
    <GetGenericData xmlns="http://...">
      <QueryMessage xmlns="http:.../...">
        <Query>
          <DataWhere xmlns="http://.../...">
            <And>
              <DataSet>ABC</DataSet>
              <Dimension id="ABC">abc</Dimension>
            </And>
          </DataWhere>
        </Query>
      </QueryMessage>
    </GetGenericData>
  </soap:Body>
</soap:Envelope>'

#headers <- c('application/xml; charset=utf-8')
#names(headers) <- 'content-type'

response = POST("http://exampleWebService?op=GetGenericData", 
                config = list(add_headers(.headers = headers)) ,
                body = body, 
                content_type(".xml"),
                encode = 'raw',
                accept_xml(),
                type = 'application/soap+xml; charset=utf-8',
                # content_type_xml(),
                authenticate(":", ":", "ntlm"))
                )

Тогда статус ответа на запрос будет ошибкой:

> response[["all_headers"]][[1]]
$status
[1] 401

> response[["all_headers"]][[2]]
$status
[1] 415

> http_type(response)
[1] "text/html"
> http_error(response)
[1] TRUE

>content(response)

No encoding supplied: defaulting to UTF-8.
{xml_document}
<html>
[1] <body><p>The server cannot service the request because the media type is unsupported.</p></body>

http_type (response) всегда будет возвращать [1] «text / html», независимо от того, как я изменил заголовок. Кажется, мой клиентский запрос не обрабатывается правильно на стороне сервера? Какой будет правильный заголовок / кодировка / тип контента ??? Любой намек?


1 Ответ

0 голосов
/ 07 февраля 2020

1 может быть, по умолчанию заголовок accept_xml() Accept: является приложением / xml try accept("application/soap+xml")

2 или изменить контекст введите текст / обычный текст, чтобы увидеть, настроен ли ваш сервер для обработки xml MIME или нет, если ответ равен 200 или 415, тогда вы будете знать, где ваша проблема - ответ сервера или запрос клиента

3 возможно заголовок чувствителен к регистру Content-Type: application/soap+xml; charset=utf-8 на вашем сервере

...