[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с CURL
Astin
Привет всем. Вот такая проблема

Отправляю через curl запрос, а этот запрос на стороне

сайта который его принимает получает не один а два запроса и получается в бд две одинаковых записи. Вводишь ссылку через строку браузера все нормально.

В чем проблема.

Вот сама функция через которую идет отправка

function SendCurl($URL, $return = true)
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $URL,
CURLOPT_USERAGENT => 'Mozzilla Gecko 4.5'
));
$resp = curl_exec($curl);
curl_close($curl);
if ($return == true) return $resp;
}
}
bestxp
В логике проблема, в логике, но никак не в запросе
Astin
Ну вот, даже так отправляю

$ua = 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$buf = curl_exec ($ch);

if (curl_errno($ch)) {

echo 'Ошибка curl: ' . curl_error($ch);
}
curl_close ($ch);

echo $buf;

И все равно идет два запроса
Astin
Мне всего то нужно сделать запрос и получить ответ, что собственно и сделано, а выходит уходят два запроса
Astin
Вот проверил еще раз

Вместо

echo $buf;


Нужно было условие

if (isset($buf)) {

echo $buf;

}

И тогда нормально
killer8080
Цитата (Astin @ 6.05.2019 - 17:28)
Нужно было условие

if (isset($buf)) {

echo $buf;

}

И тогда нормально

чушь, это условие ни на что не влияет, по любому был двойной вызов метода.
добавь debug_print_backtrace() и смотри стек вызовов.
Astin
А почему по любому был двойной вызов метода
Astin
Запустил, вот

#0 IsLogged() called at [Z:\home\regw.ru\www\index.php:65]

65 строка это запуск функции IsLogged() в которую я запихал curl
killer8080
Цитата (Astin @ 7.05.2019 - 15:17)
А почему по любому был двойной вызов метода

потому что curl двойные запросы не делает
Цитата (Astin @ 7.05.2019 - 15:42)
Запустил, вот

#0 IsLogged() called at [Z:\home\regw.ru\www\index.php:65]

65 строка это запуск функции IsLogged() в которую я запихал curl

может имеет место какой то редирект? К серваку который принимает запросы есть доступ? Возможно урл не правильный, сервак делает редирект и логирует оба запроса.
Астин
Да я на сайт делаю запрос с денвера, то есть сам запрос идет с сайта на денвере при подключении к интернету.
Но вот есть нюанс, я на сайте с протоколом https запустил код с curl и в итоге запрос был один. А вот с денвера идет два запроса. Кстати пробывал делать запрос с сайта с протоколом http и так же идет два запроса. Видимо нужно что то толи в заголовки запихать или как то правильно отработать протокол http а потом уже курл запускать. По этому вопросу не могу в сети решение найти
walerus
Цитата
запуск функции IsLogged() в которую я запихал curl
Возможна такая ситуация, при "заходе" на сайт, не важно POST или GET или еще как то, обрабатывается функция проверки авторизации (судя из названия функции), потом по коду где то еще раз вызывается проверка...

Но это лишь догадки, потому как не видно всего кода, который отправляет и принимает запросы.

Создай на сервере отдельный файл, который тупо будет принимать твои запросы с денвера, и посмотри сколько он запросов примет...
Astin
Так вот на сайте и стоит отдельный файл который принимает запросы.

Если на сайте с которого отправляешь поставить код или функцию с запросом через CURL и обновить страницу, то если сайт на HTTP идут два запроса, но ответ приходит один, к примеру я добавилась запись 5, покажет 5 а в бд копия под номером 6.
Если сделать условие, к примеру Нажал кнопку и пошел запрос, то вроде идет один запрос
Если сайт на HTTPS, ставим код, обновляем страницу и проходит один запрос
Проблема с HTTP, пробывал на разных сайтах отправлять напрямую, то есть обновил страницу и ушел запрос
walerus
Посмотри обработчик(редирект) http -> https, в htaccess, он должен быть ДО отправления запросов на index.php... или скинь сюда содержимое htaccess
Astin
Вот про свою тему забыл а проблема то вот в чем

Я уже инициализировал запрос в коде
$ch = curl_init($url);

А потом опять делаю инициализацию повторно
curl_setopt($ch, CURLOPT_URL, $url);

Просто удалить строку эту и будет один запрос
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.