@Jnas
Программист

PHP cURL, как сделать правильный POST запрос с параметрами XML?

Добрый день!


Имеется:
- серый IP провайдера (не дают белый)
- роутер ZyXEL Keenetic Extra, который позволяет к себе подключиться через интернет используя "облако Keenetic".
- сайт, хостинг на PHP
При входе в облако я вижу IP адрес моего роутера и могу уже по IP подключаться к удаленному рабочему столу.
Требуется нескольким пользователям знать этот IP без входа в облако ZyXEL Keenetic Extra.
Есть сайт и сразу была идея вывести на этом сайте информацию IP адрес моего роутера.


Итак, для начала пытаюсь всё это сделать на компе, который находится в сети данного роутера.
Смотрю при авторизации, что происходит и понимаю, что все данные получаю из отправленных запросов в 192.168.1.1/ci
db48896e26ba4495a28abcc435728b05.png7a8dfd0cfc8d430da5653b582dfb1ccf.pnga03aa80af89b4cc4bf2822231f78d580.png
xml = '<packet ref="/"><request id="1" ref="ndm[page]/ndm[update:debug_led]"><command name="show system debug"></command></request><request id="2" ref="former.status[ready]/former.status[load]"><command name="show interface"></command></request><request id="3" ref="former.status[ready]/former.status[load]"><command name="show ip name-server"></command></request><request id="4" ref="former.status[ready]/former.status[load]"><config name="ip route"><default/></config></request><request id="5" ref="former.status[ready]/former.status[load]"><command name="show system"></command></request><request id="6" ref="former.status[ready]/former.status[load]"><command name="show version"></command></request><request id="7" ref="former.status[ready]/former.status[load]"><command name="show identification"></command></request><request id="8" ref="former.status[ready]/former.status[load]"><command name="show clock date"></command></request><request id="9" ref="former.status[ready]/former.status[load]"><command name="show usb"></command></request><request id="10" ref="former.status[ready]/former.status[load]"><command name="show printers"></command></request><request id="11" ref="former.status[ready]/former.status[load]"><command name="show ndns"></command></request><request id="12" ref="former.status[ready]/former.status[load]"><command name="show kabinet status"></command></request><request id="13" ref="former.status[ready]/former.status[load]"><command name="show system mode"></command></request></packet>';

$data = array('Content-Type: text/xml');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $data);

$out = curl_exec($ch);

print "error:" . curl_error($ch) . "<br />";
print "output:" . var_dump($out) . "<br /><br />";

curl_close($ch);


при выполнения скрипта выводи на экран
error:
string(611) "HTTP/1.1 401 Unauthorized Server: Web server Date: Tue, 18 Apr 2017 06:28:25 GMT Content-Type: text/html Content-Length: 193 Connection: keep-alive WWW-Authenticate: Digest realm="ZyXEL Keenetic Extra", nonce="NbP1WHBo13hC4GbqDbKHOHSoJkTLDAjS", qop="auth" HTTP/1.1 100 Continue HTTP/1.1 405 Method Not Allowed Server: Web server Date: Tue, 18 Apr 2017 06:28:26 GMT Transfer-Encoding: chunked Connection: keep-alive Authentication-Info: nextnonce="NbP1WHBo13hC4GbqDbKHOHSoJkTLDAjS", qop=auth, rspauth="baef76133ceb496afa8272cd0f13f72a", cnonce="b6b6b9f9e565bfd2c4dc978efd589b42", nc=00000001 " output:


Подскажите, что делаю не так?
Заранее спасибо
  • Вопрос задан
  • 580 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
тема раз в год появляется

ставишь www.telerik.com/fiddler и копируешь поведение браузере, от urlencode до gzip
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы