Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 33

Методы POST запроса

31.03.2015, 15:00. Показов 1454. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня 2 сервера. Нужно отправить с 1-ого сервера запрос на 2-ой который в свою очередь по запросу отдает xml c данными. Очень долго мучаюсь с этим вопросом.
При отправке запроса общий вид должен быть "http://site.ru/zap?fio=Иванов+Иван+Иванович", после чего сервер дает ответ с xml данными.
Пробовал использовать cURL. Создал файл php c кодом:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$url = "http://site.ru/zap?fio=";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); // указываем URL, куда отправлять POST-запрос
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// разрешаем перенаправление
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // указываем, что результат запроса следует передать в переменную, а не вывести на экран
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // таймаут соединения
curl_setopt($ch, CURLOPT_POST, 1); // указываем, что данные надо передать именно методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, "Иванов Иван Иванович"); // добавляем данные POST-запроса
 
$return['html'] = curl_exec( $ch );
$return['err'] = curl_errno( $ch );
$return['errmsg']= curl_error( $ch );
$return['header']= curl_getinfo( $ch );
 
curl_close($ch); // завершаем сессию
 
print_r($return);
 
echo $result;
 
?>

При запуске php ничего не происходит. При просмотре в хроме кода пишет:"Failed to load resource: the server responded with a status of 500 (Internal Server Error)".

Помогите может есть другой вариант.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2015, 15:00
Ответы с готовыми решениями:

Имитация запроса POST
Доброго дня! Есть формочка на сайте и кнопка сохранить, после заполнения и нажатию кнопки летит следующее: Заголовки ответа ...

Отправка POST запроса
Доброго времени суток! Существует некий сайт (Сайт_1) на котором есть форма заказа пропусков, для заказа пропуска нужно ввести ID и...

Генерирование POST запроса http
Здравствуйте! Подскажите пожалуйста как быть? В http совсем не силён! Задача стоит так. Есть 3g wi-fi модем huawei e355, который нужно...

10
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
31.03.2015, 15:35
Во-первых, Вы данные в POST неправильно передаёте. А во-вторых, зачем Вы передаёте в POST, если нужно GET (т.е. в адресной строке)?
0
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 33
01.04.2015, 08:00  [ТС]
Спасибо. Понял что не пост нужен))Правда только тогда когда решил использовать сокет. Может кому-то пригодится.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$data = "Иванов Иван Иванович";
 
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
 
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET zap?FIO=$data HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
   
   fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
0
Почетный модератор
 Аватар для Humanoid
11557 / 4352 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
01.04.2015, 08:10
begun73, и это сработало? Очень странно, ведь русские буквы и пробелы в адресной строке нельзя использовать. Даже если русские буквы сервер каким-то образом проглотит, то пробелы точно нарушат структуру HTTP. Рекомендую первую строку сделать как
PHP
1
$data = urlencode("Иванов Иван Иванович");
0
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 33
01.04.2015, 14:28  [ТС]
Да с пробелами не работало я в ручную код по памяти писал сюда.))И вместо пробелов у себя ставил "+".
Сейчас такой вопрос возникает. Как обработать лучше ответ. Который приходит в xml.
У меня есть №ПК - который состоит чисто из цифр "1346", №Орг.техники - который начинается с буквы в зависимости от вида оргтехники к примеру №сканера "s4356" и есть модель орг. техники ну тут все обычно "HP-d450".
Так вот сервер присылает ответ в таком виде:
XML
1
2
3
<string>1346</string>
<string>s4356</string>
<string>HP-d450</string>
И я думаю как это все удачно вытащить...

Добавлено через 5 часов 45 минут
Решил для удобства сделать структуру у xml. Но считать данные с такого xml не получается.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<Class2 xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/RespByName.Models">
<CompNumbers xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:string>1817</d2p1:string>
<d2p1:string>1007</d2p1:string>
<d2p1:string>1008</d2p1:string>
<d2p1:string>1045</d2p1:string>
<d2p1:string>1101</d2p1:string>
<d2p1:string>1145</d2p1:string>
<d2p1:string>1433</d2p1:string>
<d2p1:string>1434</d2p1:string>
<d2p1:string>1465</d2p1:string>
<d2p1:string>1542</d2p1:string>
<d2p1:string>1543</d2p1:string>
<d2p1:string>1547</d2p1:string>
<d2p1:string>501</d2p1:string>
<d2p1:string>924</d2p1:string>
<d2p1:string>933</d2p1:string>
</CompNumbers>
<OrgModel xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:string>HP ScanJet G4050</d2p1:string>
<d2p1:string>HP Color LaserJet CP1515n</d2p1:string>
<d2p1:string>XEROX WC 5016</d2p1:string>
</OrgModel>
<OrgNumbers xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:string>S440</d2p1:string>
<d2p1:string>P441</d2p1:string>
<d2p1:string>K442</d2p1:string>
</OrgNumbers>
</Class2>
код php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
 
$fp = fsockopen("site", 80, $errno, $errstr, 30);
 
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    
    $data = urlencode("Иванов Иван Иванович");
    
    $out = "GET /api/api/GetNums?FIO=$data HTTP/1.1\r\n";
 
    $out .= "Host: 172.16.1.208\r\n";
    $out .= "Content-type: application/xml; charset=utf-8\r\n";
    $out .= "Content-length: ".strlen($data)."\r\n";
    $out .= "Connection: Close\r\n\r\n";
    $out .= $data."\r\n\r\n";
    
    $html = '';
    
    fwrite($fp, $out);
    while (!feof($fp)) {
        $html .= fgets($fp, 128);
    }
    fclose($fp);
 
    $pos = strpos($html, "\r\n\r\n");
    $html = substr($html, $pos+4);
    
    
    $xml = new SimpleXMLElement($html); 
.....
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
01.04.2015, 22:14
Лучший ответ Сообщение было отмечено begun73 как решение

Решение

begun73,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
$xml = <<<XML
<Class2 xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/RespByName.Models">
<CompNumbers xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:string>1817</d2p1:string>
<d2p1:string>1007</d2p1:string>
<d2p1:string>1008</d2p1:string>
<d2p1:string>1045</d2p1:string>
<d2p1:string>1101</d2p1:string>
<d2p1:string>1145</d2p1:string>
<d2p1:string>1433</d2p1:string>
<d2p1:string>1434</d2p1:string>
<d2p1:string>1465</d2p1:string>
<d2p1:string>1542</d2p1:string>
<d2p1:string>1543</d2p1:string>
<d2p1:string>1547</d2p1:string>
<d2p1:string>501</d2p1:string>
<d2p1:string>924</d2p1:string>
<d2p1:string>933</d2p1:string>
</CompNumbers>
<OrgModel xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:string>HP ScanJet G4050</d2p1:string>
<d2p1:string>HP Color LaserJet CP1515n</d2p1:string>
<d2p1:string>XEROX WC 5016</d2p1:string>
</OrgModel>
<OrgNumbers xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:string>S440</d2p1:string>
<d2p1:string>P441</d2p1:string>
<d2p1:string>K442</d2p1:string>
</OrgNumbers>
</Class2>
XML;
 
$dom = new DOMDocument;
$dom->loadXML($xml);
 
mPrint('CompNumbers', 'd2p1:string', $dom);
mPrint('OrgModel', 'd2p1:string', $dom);
mPrint('OrgNumbers', 'd2p1:string', $dom);
 
function mPrint($a, $b, $dom)
{
    echo "Вывод <b>".$a."</b>:<br><br>\n";
    $a = $dom->getElementsByTagName($a)->item(0)->childNodes;
    foreach ($a as $v)
        if ($v->nodeName === $b)
            echo $v->nodeValue."<br>\n";
    echo "<br>";
}
result:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Вывод CompNumbers:
 
1817
1007
1008
1045
1101
1145
1433
1434
1465
1542
1543
1547
501
924
933
 
Вывод OrgModel:
 
HP ScanJet G4050
HP Color LaserJet CP1515n
XEROX WC 5016
 
Вывод OrgNumbers:
 
S440
P441
K442
Документация по классу DOMDocument - http://php.net/manual/ru/class.domdocument.php
1
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 33
02.04.2015, 08:00  [ТС]
Извините за еще один глупый вопрос, А как этим методом вывести первые элементы этих категорий
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
02.04.2015, 18:43
Лучший ответ Сообщение было отмечено begun73 как решение

Решение

Цитата Сообщение от begun73 Посмотреть сообщение
Извините за еще один глупый вопрос, А как этим методом вывести первые элементы этих категорий
Тогда глупый ответ:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
function mPrint($a, $b, $dom)
{
    echo "Вывод <b>".$a."</b>:<br><br>\n";
    $a = $dom->getElementsByTagName($a)->item(0)->childNodes;
    foreach ($a as $v)
        if ($v->nodeName === $b)
        {
            echo $v->nodeValue."<br>\n";
            break;
        }
    echo "<br>";
}
1
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 33
03.04.2015, 08:10  [ТС]
Спасибо разобрался.)
Можна так еще))
$a = $dom->getElementsByTagName($a)->item(0)->firstChild;
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
03.04.2015, 09:50
Лучший ответ Сообщение было отмечено begun73 как решение

Решение

Цитата Сообщение от begun73 Посмотреть сообщение
Можна так еще))
$a = $dom->getElementsByTagName($a)->item(0)->firstChild;
Можно. Но вдруг этот firstChild не будет являться элементом d2p1:string. Мой вариант более универсальный
1
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 33
06.04.2015, 08:10  [ТС]
Полностью согласен с Вами))Просто в моем случае, кроме d2p1:string ничего не будет. Но Ваш вариант взял на заметку в дальнейшем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2015, 08:10
Помогаю со студенческими работами здесь

Парсинг post запроса через cURL
Стоит задача получить в поиске конкретную запись по номеру извещения. Делаю через CURL,сам сайт с формой успешно получен, но данные не...

Формирование POST запроса для ASPX странички
Доброго времени суток. Не знаю в какую ветку написать, но думаю лучше будет сюда. Задача такова: необходимо сформировать POST запрос для...

Отправка Post запроса
Можно ли сделать так, что бы пхп скрипт отправлял пост запрос другому скрипту и заносил ответ в переменную без cURL?

Разбор post запроса
Доброго времени суток, форумчане! если не в ту тему сделал, заранее извиняюсь. Пните в нужном направлении, имеется сайт...

Ручная отправка POST запроса
Подскажите, пожалуйста, как вручную на PHP отправить POST запрос, отсылающий еще и файл на $url. Заранее спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru