Skip to content

Latest commit

 

History

History
87 lines (86 loc) · 3.32 KB

snippets-xmlrpc.md

File metadata and controls

87 lines (86 loc) · 3.32 KB

HTTP(S)-запрос и ответ по интерфейсу «XML-RPC» без аутентификации

$body = @"
<?xml version="1.0"?>
<methodCall>
  <methodName>LJ.XMLRPC.getchallenge</methodName>
</methodCall>
"@
$Response = Invoke-WebRequest -URI "https://www.livejournal.com/interface/xmlrpc" -Body $body -Method "POST"
$Response.Content

Пример тела ответа:

<?xml version="1.0" encoding="UTF-8"?><methodResponse><params><param><value><struct><member><name>auth_scheme</name><value><string>c0</string></value></member><member><name>server_time</name><value><int>1674771448</int></value></member><member><name>challenge</name><value><string>c0:1674770400:1048:60:yeM13Zf4UeujVPDIapTv:03d7b6a66990e95ba17ced533b9b98d2</string></value></member><member><name>expire_time</name><value><int>1674771508</int></value></member></struct></value></param></params></methodResponse>

Приведение тела ответа в удобный для чтения человеком вид с помощью метода «Parse» класса «System.Xml.Linq.XDocument» платформы «.NET»:

[System.Xml.Linq.XDocument]::Parse($Response.Content).ToString()
<methodResponse>
  <params>
    <param>
      <value>
        <struct>
          <member>
            <name>auth_scheme</name>
            <value>
              <string>c0</string>
            </value>
          </member>
          <member>
            <name>server_time</name>
            <value>
              <int>1674771448</int>
            </value>
          </member>
          <member>
            <name>challenge</name>
            <value>
              <string>c0:1674770400:1048:60:yeM13Zf4UeujVPDIapTv:03d7b6a66990e95ba17ced533b9b98d2</string>
            </value>
          </member>
          <member>
            <name>expire_time</name>
            <value>
              <int>1674771508</int>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodResponse>

Помещаем тело ответа (параметры результата) в хеш-таблицу (ассоциативный массив) с помощью класса «System.Xml.XmlDocument» платформы «.NET»:

function toHash($str) {
  $xml = [xml]$str
  $arr = $xml.methodResponse.params.param.value.struct.member
  $hash = @{}
  for ($i = 0; $i -lt $arr.Length; $i++) {
    $hash[$arr[$i].name] = $arr[$i].value.FirstChild."#text"
  }
  return $hash
}
$params = toHash($Response.Content)
$params

Пример содержимого полученной хеш-таблицы (ассоциативного массива):

Name           Value
----           -----
challenge      c0:1674770400:1048:60:yeM13Zf4UeujVPDIapTv:03d7b6a66990e95ba17ced533b9b98d2
auth_scheme    c0
expire_time    1674771508
server_time    1674771448