Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PHP cURL и карты Яндекса

40K
26 ноября 2009 года
mafiozzzza
34 / / 16.07.2009
Здравствуйте.
У меня проблема. Необходимо получить страницу типа
[HTML]http://maps.yandex.ru/?text=Россия,Москва,Электродная улица[/HTML]
Но функция file_get_contents не работает. Я почитал немного и понял что это из-за недостатка заголовков которые браузер отправляет серверу.
Так и узнал про сURL
Скачал его, установил. Да, кстати, все делаю на локальной машине, стоит Denwer(apache2,php5...)
Так вот собственно вопрос. Как мне с помощью сURL получить желанную страницу. Использовал следующий скрипт:
[HTML]<?php
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4" ;
// ставим, что наш броузер читает только файлы в html формате
$header [] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5" ;
$header [] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1";
// говорим, что броузер не читает файлы в gzip формате
$header [] = "Accept_encoding: identity";
$header [] = "Accept_language: en-us,en;q=0.5";
$header [] = "Connection: close";
$header [] = "Cache-Control: no-store, no-cache, must-revalidate";
$header [] = "Keep_alive: 300";
$header [] = "Expires: Thu, 01 Jan 1970 00:00:01 GMT";

function data_encode ( $data , $keyprefix = "" , $keypostfix = "" ) {
assert ( is_array ( $data ) );
$vars = null ;
foreach ( $data as $key => $value ) {
if ( is_array ( $value )) $vars .= data_encode ( $value , $keyprefix . $key . $keypostfix . urlencode ( "[" ), urlencode ( "]" ));
else $vars .= $keyprefix . $key . $keypostfix . "=" . urlencode ( $value ). "&" ;
}
return $vars ;
}

// функция вывода страники
function CurlPage ( $path ) {
// $path - страничка, какую смотрим
global $agent, $header, $referer, $arr_cookie, $cookie_file;
// вызываем сеанс Curl
$ch = curl_init ( $path );
// CURL будет возвращать результат, а не выводить его в печать
@curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
// выводим подробные сообщения о всех действиях
@curl_setopt ( $ch , CURLOPT_VERBOSE , 1 );
// считываем страничку с хедером от сервера
@curl_setopt ( $ch , CURLOPT_HEADER , 1 );
// отправим серверу user_agent сформированный нами самими
@curl_setopt ( $ch , CURLOPT_USERAGENT , $agent );
// оправляем $referer, что пришли с первой страницы сайта
@curl_setopt ( $ch , CURLOPT_REFERER , $referer );
// оправляем на сервер хедер, который мы сами сформировали
@curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header );
// при получении HTTP заголовка "Location: " будет
// происходить перенаправление
@curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , 1 );
// запретить проверку сертификата удаленного сервера
@curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER, 0 );
// не будем проверять существование имени
@curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST, 0 );
// если есть массив с cookie, то отправим серверу, эти cookie
if ( @is_array ($arr_cookie)){
while (list($key, $val) = @each ($arr_cookie)){
$COKKIES .= trim ($val[0])."=". trim ($val[1])."; ";
}
@curl_setopt ( $ch , CURLOPT_COOKIE , $COKKIES." expires=Mon, 14-Apr-08 10:34:13 GMT" );
}
// если с сервера пришло cookie, то запишем его в файл $cookie_file
@curl_setopt ( $ch , CURLOPT_COOKIEJAR , $cookie_file );
@curl_setopt ( $ch , CURLOPT_COOKIEFILE , $cookie_file );
// если мы послали данные из формы, которая стоит
// на страничке $path, добавляем метод $_POST
/*if (isset($_POST) and $_SERVER["REQUEST_METHOD"]=="POST"){
@curl_setopt ( $ch , CURLOPT_POST , 1 );
@curl_setopt ( $ch , CURLOPT_POSTFIELDS , substr ( data_encode ( $_POST ), 0 , - 1 ) );
}*/
// получаем страничку $path с хедером
$tmp = @curl_exec ( $ch );
// закрываем сеанс Curl
curl_close ( $ch );
return $tmp;
}

echo CurlPage ( 'http://maps.yandex.ru/?text=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%2C+%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0%2C+%D0%9C%D0%B8%D0%BD%D0%B8%D0%BD%D1%81%D0%BA%D0%B8%D0%B9+%D0%BF%D0%B5%D1%80%D0%B5%D1%83%D0%BB%D0%BE%D0%BA%2C+4%2F6' );
?> [/HTML]

И еще с помощью firebug'a посмотрел залоловки, вот они
[HTML]Заголовки запроса
Host maps.yandex.ru
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Cookie yandexuid=1227030401259185272; yabs-frequency=/2/tKT_09458JoQTG2H1I4N3te0aGL1uuvd0945VFn9Vm2H1I76J470aGKy00015R9-09459rguVG2H1KVXPdu0aGM7e2ji0945OQUDVG2H1MUEPNK0aGLXLgvl0945GUowTm2H1M40//fGAH1G42/f0AH1G43; fuid01=4aecc7f128b36f39.qyTxG7QQsmHXugoPOSD3sCebNm3AHR7rYbVm54robDUIKU5nuZ-G44D-Jnm4g2mwtZNF7DjKJGx7vt9oiznJ4J7pXE41zO9iT4FZlZ1UUITyrmSf_PSzXS-ue4IJgdkJ; t=p[/HTML]

Не прошу решить эту проблему за меня. просто прошу направить на истинный путь, может укажите корректный запрос для ПС или на литературу, которую надо подчитать. Буду рад любой помощи.
13
27 ноября 2009 года
RussianSpy
3.0K / / 04.07.2006
А в чем проблема-то?
244
27 ноября 2009 года
UAS
2.0K / / 19.07.2006
Для начала стоит убрать все @ перед всеми функциями и посмотреть, будут ли ошибки.
40K
27 ноября 2009 года
mafiozzzza
34 / / 16.07.2009
Проблема в том, что карты яндекса возвращают ошибку 400 - Bad Request
А что вообще означают @ перед функциями?
7
27 ноября 2009 года
@pixo $oft
3.4K / / 20.09.2006
Этот оператор отключает предупреждения.Если разместить его перед любым выражением(вомзожно,включающим вызовы функций,генерирующих предупреждения),то собщения об ошибках в этом выражении будут подавлены и в окне браузера не отображены
40K
27 ноября 2009 года
mafiozzzza
34 / / 16.07.2009
Спасибо, тогда понятно. Ну в общем я @ отключил но все равно не получил желаемого результата.
40K
27 ноября 2009 года
mafiozzzza
34 / / 16.07.2009
И как посмотреть запрос который мой локальный серверпосылает серверу яндекса?
13
27 ноября 2009 года
RussianSpy
3.0K / / 04.07.2006
FireBug
либо сниффером
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог