Как правильно построить запрос на мыло в R - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь создать запрос на мыло для входа в польский REGON API.Я попробовал довольно много способов, найденных в Интернете, но ни один из них не сработал.Основанный на API запрос на вход в систему имеет такую ​​структуру xml:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action>
<wsa:To>https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
</soap:Header>
<soap:Body>
<ns:Zaloguj>
<!--Optional:-->
<ns:pKluczUzytkownika>user_key</ns:pKluczUzytkownika>
</ns:Zaloguj>
</soap:Body>
</soap:Envelope>

Затем я попытался пропустить его через soupUI, но у меня это не сработало.Код XML, который работает для меня при использовании soapUI:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
   <soap:Header>
   <To soap:mustUnderstand="1" xmlns="http://www.w3.org/2005/08/addressing">https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</To>
   </soap:Header>

   <soap:Body>
      <ns:Zaloguj>
         <!--Optional:-->
         <ns:pKluczUzytkownika>user_key</ns:pKluczUzytkownika>
      </ns:Zaloguj>
   </soap:Body>
</soap:Envelope>

Заголовки:

POST https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj"
Content-Length: 606
Host: wyszukiwarkaregon.stat.gov.pl
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

Это код R, который я пробовал:

test <- httr::POST(url = "https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc",
           body = upload_file("request_login.xml"),
           httr::add_headers(c('Accept-Encoding' = 'gzip,deflate',
                               'Content-Type' = 'application/soap+xml;charset=UTF-8;action="http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj"',
                               'Host' = 'wyszukiwarkaregon.stat.gov.pl',
                               'Connection' = 'Keep-Alive')))

Где request_login.xml содержит код xml, переданный в soupUI.Возвращает http статус 500

Второй подход:

reader <- basicTextGatherer()
reader$reset()
curlPerform(url = "https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc",
            httpheader=c("Accept-Encoding" = "gzip,deflate",
                         "Content-Type" = 'application/soap+xml;charset=UTF-8,action="http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj"'),
            postfields = toJSON(list("pKluczUzytkownika" = "user_key")),
            customrequest = "POST",
            writefunction = reader$update,
            verbose = T,
            ssl.verifypeer = FALSE)
reader$value()

Этот возвращает html статус 415.

Мне нужно решение в R, не важно, какой пакет.

...