<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог saintista &#187; CURL</title>
	<atom:link href="http://saintist.ru/category/php/curl/feed/" rel="self" type="application/rss+xml" />
	<link>http://saintist.ru</link>
	<description>php phpquery css jscript jQuery</description>
	<lastBuildDate>Wed, 25 Apr 2012 05:43:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>CP1252 в UTF-8, как  преобразовать кодировку</title>
		<link>http://saintist.ru/2009/09/25/cp1252-encode-to-utf-8/</link>
		<comments>http://saintist.ru/2009/09/25/cp1252-encode-to-utf-8/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 20:28:06 +0000</pubDate>
		<dc:creator>saintist</dc:creator>
				<category><![CDATA[CURL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpquery]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[mb_internal_encoding]]></category>

		<guid isPermaLink="false">http://saintist.ru/?p=863</guid>
		<description><![CDATA[Взял недавно заказ на сбор информации из открытых источников, в просторечии, парсинг сайта. Использовал phpQuery как базу для написания граббера. Клиенту нужен был результат конечный, сам граббер не нужен. Сайтов было несколько, и в общей сложности собрал базу на 20 тысяч записей. Но речь не об этом. При грабе одного из сайтов столкнулся с небольшой [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://saintist.ru/wp-content/uploads/2009/09/i-will-not-assume-untrusted-data-is-valid-utf-8_0.png"><img class="size-full wp-image-864 aligncenter" title="i-will-not-assume-untrusted-data-is-valid-utf-8_0" src="http://saintist.ru/wp-content/uploads/2009/09/i-will-not-assume-untrusted-data-is-valid-utf-8_0.png" alt="i-will-not-assume-untrusted-data-is-valid-utf-8_0" width="505" height="317" /></a></p>
<p>Взял  недавно заказ на сбор информации  из  открытых  источников, в просторечии, парсинг сайта. Использовал  phpQuery как базу для  написания граббера. Клиенту нужен был результат конечный, сам граббер не нужен. Сайтов было несколько, и в общей сложности собрал  базу на 20 тысяч записей. Но речь не об этом. При грабе одного из  сайтов столкнулся с небольшой проблемой.<br />
<span id="more-863"></span></p>
<p>Кириллическая кодировка выводилась в виде <strong>??????????? / ??? </strong></p>
<p>на странице был  прописан  charset  windows-1251</p>
<p>забирал  контент донора через</p>
<pre>
$ch = curl_init($url);
$agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)";
@curl_setopt ( $ch , CURLOPT_USERAGENT , $agent );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($ch);
curl_close($ch);
</pre>
<p>потом $page скармливал  phpQuery</p>
<pre>
$results = phpQuery::newDocument($page )
</pre>
<p>но  phpQuery  почему-то для скормленного ей  контента ставила  utf-8 (она себя так ведет если не может определить кодировку донора, т.е. ставит по умолчанию UTF-8 )</p>
<p><strong>mb_internal_encoding()</strong> выдал что  используется ISO-8859-1, это же подтвердил  и анализ  заголовков, с целевого донора</p>
<pre>
Date	Fri, 25 Sep 2009 19:54:06 GMT
Server	Microsoft-IIS/6.0
X-Powered-By	ASP.NET
X-AspNet-Version	2.0.50727
Location	************
Cache-Control	private
Accept-Charset	ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Length	0
</pre>
<p>а ISO-8859-1  это не cp1251 а cp1252</p>
<p><strong>Решение. Как  преобразовать кодировку CP1252 в UTF-8 (в UTF-8  пишется в базу и скрипт сам в UTF-8  сохранен)</strong></p>
<pre>
iconv('windows-1252','utf-8//IGNORE','текст');  непомогло
</pre>
<p>возвращало <strong>??«???????°?®?±????&amp; #195;? / ?‹???·</strong></p>
<p>преобразование через  mb_convert_encoding(&#8216;текст&#8217;,mb_internal_encoding(), ‘UTF-8?); тоже не дало  результат</p>
<p>Решение оказалось  вот  каким</p>
<pre>
$title= mb_convert_encoding($title,mb_detect_encoding($title , "CP1252"), 'UTF8');
$title= mb_convert_encoding($title,'UTF8', "CP1251");
</pre>
<p>если просто из CP1252 в UTF8 преобразовать то на выходе  всеравно каракули (вопросительные знаки), приходится из  UTF-8 в CP1251 преобразовывать  и все ок</p>
<p><strong>ps:</strong>вполне возможно что в вашем случае  этот вариант не подойдет, рассмотрен частный случай, сервер с которого я парсил инфу своеобразно отдавал ее.<br />
В странице была одна кодировка прописана тегом как CP1251, но на деле была CP1252, если смотреть заголовки.  </p>
<p>UTF дергаю так как  на моем хосте все  своеобразно настроено )  </p>
<p>в итоге смотрите по обстоятельствам</p>
]]></content:encoded>
			<wfw:commentRss>http://saintist.ru/2009/09/25/cp1252-encode-to-utf-8/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>CURL HTTPS GET POST отправка</title>
		<link>http://saintist.ru/2009/05/20/curl-https-get-post-otpravka/</link>
		<comments>http://saintist.ru/2009/05/20/curl-https-get-post-otpravka/#comments</comments>
		<pubDate>Wed, 20 May 2009 08:11:05 +0000</pubDate>
		<dc:creator>saintist</dc:creator>
				<category><![CDATA[CURL]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://saintist.ru/?p=380</guid>
		<description><![CDATA[Функции для отправки GET и POST запросов через https Отправка GET function send_get($get_url,$coo,$refer) { // $get_url &#8212; куда отправить ,$coo- строка куков,$refer &#8212; якобы откуда пришли, некоторые проверяют $ch = curl_init(); // curl_setopt($ch, CURLOPT_PROXY, &#171;http://192.168.2.600:2323&#8243;); curl_setopt($ch, CURLOPT_URL, $get_url); curl_setopt($ch, CURLOPT_HEADER,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_REFERER, $refer ); curl_setopt($ch, CURLOPT_COOKIE,$coo); [...]]]></description>
			<content:encoded><![CDATA[<p>Функции для отправки GET  и POST  запросов через  https<br />
<span id="more-380"></span></p>
<p><strong>Отправка GET</strong></p>
<p>function send_get($get_url,$coo,$refer)<br />
{<br />
// $get_url &#8212; куда отправить ,$coo- строка куков,$refer &#8212; якобы откуда пришли, некоторые проверяют<br />
$ch = curl_init();<br />
// curl_setopt($ch, CURLOPT_PROXY, &#171;http://192.168.2.600:2323&#8243;);<br />
curl_setopt($ch, CURLOPT_URL, $get_url);<br />
curl_setopt($ch, CURLOPT_HEADER,1);<br />
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br />
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);<br />
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);<br />
curl_setopt($ch, CURLOPT_REFERER, $refer );<br />
curl_setopt($ch, CURLOPT_COOKIE,$coo);<br />
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);<br />
curl_setopt($ch, CURLOPT_USERAGENT, &#171;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)&#187;);<br />
curl_setopt($ch, CURLOPT_VERBOSE,1);<br />
return $data = curl_exec($ch);<br />
$type=curl_multi_getcontent($ch);<br />
}</p>
<p><strong>Отправка  POST</strong></p>
<p>function send_post($post_url,$post_data,$coo,$refer)<br />
{<br />
// $post_data &#8212; PAST  которые нужно отправить<br />
// $get_url &#8212; куда отправить ,$coo- строка куков,$refer &#8212; якобы откуда пришли, некоторые проверяют<br />
$ch = curl_init();<br />
//curl_setopt($ch, CURLOPT_PROXY, &#171;http://192.168.2.600:2323&#8243;);<br />
curl_setopt($ch, CURLOPT_URL, $post_url);<br />
curl_setopt($ch, CURLOPT_HEADER,1);<br />
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br />
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);<br />
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);<br />
curl_setopt($ch, CURLOPT_REFERER, $refer );<br />
curl_setopt($ch, CURLOPT_COOKIE,$coo);<br />
curl_setopt($ch, CURLOPT_POST, true);<br />
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);<br />
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);<br />
curl_setopt($ch, CURLOPT_USERAGENT, &#171;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)&#187;);<br />
curl_setopt($ch, CURLOPT_VERBOSE,1);<br />
echo $data = curl_exec($ch);<br />
$type=curl_multi_getcontent($ch);<br />
$coo=filter3($type);<br />
curl_close($ch);<br />
return $type;<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://saintist.ru/2009/05/20/curl-https-get-post-otpravka/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CURL  справка</title>
		<link>http://saintist.ru/2009/05/20/curl-spravka/</link>
		<comments>http://saintist.ru/2009/05/20/curl-spravka/#comments</comments>
		<pubDate>Wed, 20 May 2009 08:04:47 +0000</pubDate>
		<dc:creator>saintist</dc:creator>
				<category><![CDATA[CURL]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://saintist.ru/?p=377</guid>
		<description><![CDATA[Небольшая справка по функциям CURL Функция устанавливает параметр, имеющий имя option, сессии CURL с именем ch, в значение value. Для возможных значений аргумента option, которые перечислены в следующем списке, соответствующее значение value должно указываться в виде целого числа: CURLOPT_INFILESIZE — установить ожидаемый размер получаемого файла при его загрузке на удаленный сервер. CURLOPT_VERBOSE — при ненулевом [...]]]></description>
			<content:encoded><![CDATA[<p>Небольшая справка по  функциям CURL<br />
<span id="more-377"></span><br />
Функция устанавливает параметр, имеющий имя option, сессии CURL с именем ch, в значение value.</p>
<p>Для возможных значений аргумента option, которые перечислены в следующем списке, соответствующее значение value должно указываться в виде целого числа:</p>
<p><strong>CURLOPT_INFILESIZE</strong> — установить ожидаемый размер получаемого файла при его загрузке на удаленный сервер.</p>
<p><strong>CURLOPT_VERBOSE </strong>— при ненулевом значении будет сообщаться все, что происходит во время сессии.</p>
<p><strong>CURLOPT_HEADER </strong>— при ненулевом значении заголовок будет включаться в содержимое вывода.</p>
<p><strong>CURLOPT_NOPROGRESS </strong>— при ненулевом значении блокируется отображение индикатора хода выполнения операций передачи. По умолчанию этот параметр установлен, и его следует изменять только для целей отладки.</p>
<p><strong>CURLOPT_NOBODY </strong>— при ненулевом значении содержимое тега BODY не будет включаться в вывод.</p>
<p><strong>CURLOPT_FAILONERROR </strong>— при ненулевом значении будет происходить обычное завершение сценария PHP, если будет получен код возврата HTTP со значением большим, чем 300. По умолчанию происходит нормальный возврат в сценарий с игнорированием кода, вызвавшего ошибку.</p>
<p><strong>CURLOPT_UPLOAD </strong>— при ненулевом значении происходит подготовка PHP для загрузки.</p>
<p><strong>CURLOPT_POST </strong>— при ненулевом значении PHP выполняет обычный метод HTTP POST. Тип POST будет иметь нормальный вид application/x-www- from-urlencoded.</p>
<p><strong>CURLOPT_FTPLISTONLY </strong>— при ненулевом значении PHP будет выводить имена файлов только в FTP.</p>
<p><strong>CURLOPT_FTPAPPEND </strong>— при ненулевом значении PHP будет осуществлять добавление в конец существующего удаленного FTP-файла, вместо его перезаписи.</p>
<p><strong>CURLOPT_NETRC </strong>— при ненулевом значении PHP будет просматривать файл ~./netrc в поисках имени пользователя и пароля для осуществления доступа к удаленному сайту.</p>
<p><strong>CURLOPT_FOLLOWLOCATION </strong>— при ненулевом значении переадресация будет проходить согласно HTTP-заголовкам Location.</p>
<p><strong>CURLOPT_PUT </strong>— при ненулевом значении файл отсылается методом HTTP PUT. Параметры файла CURLOPT_INFILE и CURLOPT_INFILESIZE также должны быть указаны.</p>
<p><strong>CURLOPT_MUTE </strong>— при ненулевом значении PHP будет исполнять функции CURL без дополнительного вывода.</p>
<p><strong>CURLOPT_TIMEOUT </strong>— позволяет передать целочисленный параметр, определяющий в секундах максимально допустимое время исполнения функций CURL.</p>
<p><strong>CURLOPT_LOW_SPEED_LIMIT </strong>— принимает целочисленный параметр, определяющий скорость передачи данных в байтах в секунду, которая будет использоваться для проверки установленного соединения. Сеанс прерывается, если превышается время максимально допустимого ожидания <strong>CURLOPT_ LOW_SPEED_TIME</strong>.</p>
<p><strong>CURLOPT_LOW_SPEED_TIME </strong>— принимает целочисленный параметр, определяющий максимальное время передачи данных в секундах, при скорости <strong>CURLOPT_ LOW_SPEED_LIMIT</strong>. При превышении этого времени PHP будет прерывать выполнение операции, рассматривая ее как недопустимо медленную.</p>
<p><strong>CURLOPT_RESUME_FROM </strong>— принимает целочисленный параметр, определяющий смещение в байтах, с которого должна начинаться передача.</p>
<p><strong>CURLOPT_SSLVERSION</strong> — принимает целочисленный параметр, определяющий используемую версию SSL. По умолчанию PHP будет пытаться самостоятельно определить версию, хотя в некоторых случаях ее следует устанавливать вручную.</p>
<p><strong>CURLOPT_TIMECONDITION </strong>— позволяет передать константный параметр, определяющий смысл параметра <strong>CURLOPT_TIMEVALUE</strong>. Можно использовать значение по умолчанию <strong>TIMECOND_IFMODSINCE</strong> или значение <strong>TIMECOND_ISUNMODSINCE</strong>.</p>
<p><strong>CURLOPT_TIMEVALUE </strong>— позволяет передать целочисленный параметр, содержащий значение времени в формате “<strong>UNIX-timestamp</strong>”. Это значение будет использоваться с учетом установки <strong>CURLOPT_TIMEVALUE</strong>.</p>
<p>Для следующих возможных значений аргумента option соответствующее значение value должно указываться в строковое значение.</p>
<p><strong>CURLOPT_URL</strong> — адрес URL, по которому отправляется запрос. Этот параметр также можно установить при вызове функции curl_init().</p>
<p><strong>CURLOPT_USERPWD</strong> — позволяет при подключении передавать строку в формате “[username]:[password]”.</p>
<p><strong>CURLOPT_PROXYUSERPWD </strong>— позволяет при подключении к HTTP-прокси передавать строку в формате “[username]:[password]”.</p>
<p><strong>CURLOPT_RANGE </strong>— заставляет передавать диапазон в формате “X-Y”, где значение X или Y может быть не указано. При использовании протокола HTTP возможна одновременная передача нескольких интервалов, разделенных запятыми.</p>
<p><strong>CURLOPT_POSTFIELDS </strong>— позволяет передавать полную строку данных, посылаемых методом HTTP POST.</p>
<p><strong>CURLOPT_REFERER </strong>— позволяет передавать строку, содержащую заголовок &#171;referer&#187;, используемый в запросах HTTP.</p>
<p><strong>CURLOPT_USERAGENT </strong>— позволяет передавать строку, содержащую заголовок &#171;user-agent&#187;, используемый в запросах HTTP.</p>
<p><strong>CURLOPT_FTPPORT </strong>— позволяет передавать строку, содержащую значение IP- адреса, используемого инструкцией POST для подключения к удаленному серверу FTP. Эта строка может содержать простой IP-адрес, имя хоста или имя сетевого интерфейса (под UNIX), или даже символ ?, указывающий системный адрес IP, используемый по умолчанию.</p>
<p><strong>CURLOPT_COOKIE </strong>— позволяет передать строку с содержимым cookie, который будет отправлен в заголовке HTTP.</p>
<p><strong>CURLOPT_SSLCERT </strong>— позволяет передать строку с именем файла, содержащего SSL-сертификат формата PEM.</p>
<p><strong>CURLOPT_SSLCERTPASSWD </strong>— позволяет передать строку с паролем, необходимым для использования сертификата, указанного параметром <strong>CURLOPT_SSLCERT</strong>.</p>
<p><strong>CURLOPT_COOKIEFILE </strong>— позволяет передать строку с именем файла, содержащего данные cookie. Этот файл должен быть в формате Netscape или в виде простого заголовка HTTP, сохраненного в файле.</p>
<p><strong>CURLOPT_CUSTOMREQUEST </strong>— позволяет передать строку, которая будет использоваться вместо HTTP запроса GET или HEAD. Этот механизм можно использовать при выполнении устаревшего запроса HTTP, например DELETE. Не стоит использовать эту возможность, не выяснив предварительно, поддерживает ли сервер указанную команду.</p>
<p>Для следующих возможных значений аргумента option соответствующее значение value должно указываться дескриптором, полученным от функции fopen().</p>
<p><strong>CURLOPT_FILE </strong>— указывается файл, в котором следует сохранять полученные данные. По умолчанию используется стандартный поток вывода stdout.<br />
<strong>CURLOPT_INFILE </strong>— задается файл, из которого следует получать данные для передачи.<br />
<strong>CURLOPT_WRITEHEADER </strong>— указывается файл для записи содержимого заголовков.<br />
<strong>CURLOPT_STDERR </strong>— указывается файл для сохранения результатов ошибок вместо использовавшегося ранее потока stderr.</p>
<p><strong>Пример:</strong><br />
вот такой функцией например  забираем содержимое страницы с учетом кукисов</p>
<p>function get_page($url) {<br />
                       //путь куда сохраняем файл с куками<br />
		       $user_cookie_file = &#8216;cookies.txt&#8217;;<br />
		       $ch = curl_init($url);<br />
		       curl_setopt($ch, CURLOPT_URL,$url);<br />
		       curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />
                       //&#8212; маскируемся под браузер<br />
		       curl_setopt($ch, CURLOPT_USERAGENT, &#171;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)&#187;);<br />
		      //куки<br />
                      curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);<br />
                       //куки<br />
		       curl_setopt($ch, CURLOPT_COOKIEJAR,  $user_cookie_file); </p>
<p>		       $html = curl_exec($ch);<br />
		       curl_close($ch);<br />
		       return $html; //Возвращаем результат<br />
		}</p>
]]></content:encoded>
			<wfw:commentRss>http://saintist.ru/2009/05/20/curl-spravka/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: basic
Database Caching 6/17 queries in 0.004 seconds using disk: basic

Served from: saintist.ru @ 2012-05-22 20:34:08 -->
