Добрый день. Мне нужно получить данные по этому адресу: http://rtk.geospider.ru:8000/ Пытаюсь получить через curl но ничего не выходит. Вот код: PHP: $url = "rtk.geospider.ru:8000"; $defaults = array( CURLOPT_HEADER => 0, CURLOPT_URL => $url, CURLOPT_FRESH_CONNECT => 1, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FORBID_REUSE => 1, CURLOPT_TIMEOUT => 4, CURLOPT_PORT => 8000 ); $ch = curl_init(); curl_setopt_array($ch, ($defaults)); if( ! $result = curl_exec($ch)) { $result = curl_error($ch); } curl_close($ch); var_dump($result); в результате получаю сообщение string(65) "Operation timed out after 4000 milliseconds with 0 bytes received" Подскажите пожалуйста что я делаю не так?
ну что я еще могу предположить это то, что надо отправлять какие то заголовки, хотя конечно это вряд ли. если что вот тут описано как отправлять заголовки - https://toster.ru/q/96569
ну вот и чего ты отказываешься от такой светлой мысли? Я в таких ситуациях делаю в браузере запрос и через инструменты разработчика смотрю все заголовки, которыми браузер обменялся с сервером. Потом в курле выставляю такие же заголовки и жду положительного результата. Часто этого бывает достаточно. Я бы обратил внимание автора, что он дважды выполняет запрос. Для зачем? PHP: <?php $host = 'rtk.geospider.ru'; $ch = curl_init($host); curl_setopt($ch, CURLOPT_URL, $host . '/'); curl_setopt($ch, CURLOPT_PORT, 8000); curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/ru_php_forum_58926.cookiefile"); curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/ru_php_forum_58926.cookiefile"); curl_setopt($ch, CURLOPT_ENCODING, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PROXY, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'); curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Connection: keep-alive', 'Cache-Control: max-age=0', 'Upgrade-Insecure-Requests: 1', 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36', 'Referer: https://php.ru/forum/threads/curl-nichego-ne-vozvraschaet.58926/', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding: gzip, deflate, sdch', 'Accept-Language: ru,en-US;q=0.8,en;q=0.6', )); $result = curl_exec($ch); if(! $result) { var_dump(curl_error($ch)); exit(1); } curl_close($ch); echo $result;
Я недавно тоже маялся с такой проблемой и додумался так же скопировать оттуда заголовки)) --- Добавлено --- В общем, отличный совет!
ну я отталкивался от того, что если бы что-то не так было с заголовками то не было бы timeout, а тут же получал что-то типа "гуляй вася".
@VLK ну почему же? Например, livejournal работает через сеть проксей. Платные аккаунты получают контент через "быстрые" маршруты, а халявщики - ждуть. Раньше в платных аккаунтах в исходник страницы даже врисовывался комментарий типа "вы получили эту страницу раньше чем 326 человек". К чему я это. Если пользователь - хороший браузер, то можно ему контент отдать сразу. А если бот - с задержкой. Не факт, что тот ресурс по такой схеме работает, но пример я удачный привел)))) Можно конечно поиграться с таймаутом и проверить через сколько придет ответ, если придет. Но по мне так уж лучше более дружелюбно обмениваться заголовками.