Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: переменная из curl
 
 автор: kapitalist   (23.11.2015 в 21:52)   письмо автору
 
 

Всем, доброго времени суток. Возник вопрос связанный с curl
Есть код:

$post_data = array (
    "foo" => "bar",
    "query" => "Nettuts",
    "action" => "Submit"
);
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://test2.ru/tester.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
$data = curl_exec($ch);
 
curl_close($ch);
echo $data['response'];


Строка curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - вроде должна отдавать ответ, а не выводить данные в браузер.
Тем не менее echo $data['response']; отдает мне первый символ ответа, а мне нужна именно переменная.
Как этого можно добиться?

  Ответить  
 
 автор: Trianon   (23.11.2015 в 22:15)   письмо автору
 
   для: kapitalist   (23.11.2015 в 21:52)
 

print_r($data);

  Ответить  
 
 автор: kapitalist   (24.11.2015 в 08:05)   письмо автору
 
   для: Trianon   (23.11.2015 в 22:15)
 

Ну это понятно. А как например $data[response] вывести?

  Ответить  
 
 автор: Trianon   (24.11.2015 в 15:54)   письмо автору
 
   для: kapitalist   (24.11.2015 в 08:05)
 

Еще раз.
1. Что выдает print_r($data); ?
2. Откуда вы взяли, что $data[response] вообще определен?

  Ответить  
 
 автор: kapitalist   (24.11.2015 в 19:57)   письмо автору
 
   для: Trianon   (24.11.2015 в 15:54)
 

1.print_r ($data) -показывает массив, что вообщем-то и должно показывать
2. я вижу response в массиве, который отдает data

  Ответить  
 
 автор: Trianon   (24.11.2015 в 21:02)   письмо автору
 
   для: kapitalist   (24.11.2015 в 19:57)
 

вот и показали бы воспроизводимый реальный отклик.
У меня сомнения по обоим пунктам.

  Ответить  
 
 автор: kapitalist   (25.11.2015 в 19:57)   письмо автору
 
   для: Trianon   (24.11.2015 в 21:02)
 

Ответ приходит такой {"status:"403, "response:"Попытка работы с чужими данными}
пока разложил через explode, но хочется докапаться до сути.

  Ответить  
 
 автор: Trianon   (26.11.2015 в 12:53)   письмо автору
 
   для: kapitalist   (25.11.2015 в 19:57)
 

Ну вот не знаю как это у вас получается.


Вот код:
<?php

$post_data 
= array (
    
"foo" => "bar",
    
"query" => "Nettuts",
    
"action" => "Submit"
);

$ch curl_init();
curl_setopt($chCURLOPT_URL"http://test2.ru/tester.php");
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS$post_data);
curl_setopt($chCURLOPT_RETURNTRANSFER1);

$data curl_exec($ch);

curl_close($ch);
var_dump($data);

?>


Вот такой ответ:
string(19448) "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ....
....
</html>
"

И в строке html-код кил на 20.

Специально попробовал обратиться к левому ресурсу, дабы получить один из 400х кодов.
Пожалуйста:
string(166) "<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx</center>
</body>
</html>
"


Ни в одном из доступных мануалов нет ни слова про то, что curl_exec может возвращать ассоциативный массив с ключами status и response
Может вам там функцию подменили ?

  Ответить  
 
 автор: kapitalist   (03.12.2015 в 09:51)   письмо автору
 
   для: Trianon   (26.11.2015 в 12:53)
 

А если в tester.php сделать так:

<?
header
('Content-type: application/json'); // На всякий случай, чтобы точно было в json
$p1 200;
$p2 1234;
exit (
'{"status:"'.$p1.', "response:"'.$p2.'}');
?>

  Ответить  
 
 автор: Trianon   (03.12.2015 в 10:09)   письмо автору
 
   для: kapitalist   (03.12.2015 в 09:51)
 

специально с нарушением синтаксиса JSON?
>
<?
header
('Content-type: application/json'); // На всякий случай, чтобы точно было в json
$p1 200;
$p2 1234;
exit (
'{"status:"'.$p1.', "response:"'.$p2.'}');
?>

  Ответить  
 
 автор: kapitalist   (03.12.2015 в 10:51)   письмо автору
 
   для: Trianon   (03.12.2015 в 10:09)
 

Ну нет, конечно ))))
Но на сути вопроса это вроде не отражается?! )))

  Ответить  
 
 автор: Trianon   (03.12.2015 в 13:40)   письмо автору
 
   для: kapitalist   (03.12.2015 в 10:51)
 

не понял

  Ответить  
 
 автор: kapitalist   (03.12.2015 в 15:31)   письмо автору
 
   для: Trianon   (03.12.2015 в 13:40)
 

Писал вопрос выше: "А как например $data[response] вывести?"

  Ответить  
 
 автор: Trianon   (03.12.2015 в 18:37)   письмо автору
 
   для: kapitalist   (03.12.2015 в 15:31)
 

Так и я ответ выше написал.
никак. $data имеет тип string.
В вашем (исправленном) примере
string(31) "{"status":200, "response":1234}"

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования