CURL Яндекс.XML работа по HTTPS покажите пример работы на PHP

SS
На сайте с 14.04.2006
Offline
110
4990

Уже N часов пытаюсь сделать запрос к ЯндексXML с помощью PHP curl.

Вот мой код

		


$sYandexUrl = 'https://yandex.ru/search/xml?user=МОЙ_ЛОГИН&key=МОЙ_КЛЮЧ&query=test';
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_URL, $sYandexUrl);

$out = curl_exec ($curl);
var_dump($out);

В качестве результата получаю:

bool(false)

При этом содержимое переменной $sYandexUrl вставляю в браузер и ответ получаю.

Соответственно ip зарегистрирован в Яндекс.XML, ключ тоже корректный.

Что я делаю не так :) ?

owx
На сайте с 27.06.2009
Offline
100
owx
#1

Посмотрите, что ответит сам CURL


print curl_error($curl);
SS
На сайте с 14.04.2006
Offline
110
#2


bool(false)
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
ДП
На сайте с 23.11.2009
Offline
203
#3


curl_setopt($curl, CURLOPT_VERBOSE, 1);

Чтобы посмотреть за ходом выполнения, может что-то интересное быть.

А так как правило проблемы с ssl сертификатами - опция CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST и CURLOPT_CAINFO

Пока писал - уже ответили, тогда


curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

Но это костыли по большому счёту

SS
На сайте с 14.04.2006
Offline
110
#4

~AL~, спасибо вам, умный человек. Благодаря вашему посту, получил ошибку, загуглил и нашел ответ.

Возможно кому-то пригодится.

Нужно ещё добавить 2 строки

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);


---------- Добавлено 31.07.2015 в 16:57 ----------

Дикий пионер, вам тоже спасибо. Нашел эту информацию в гугле, в том момент когда вы писали сообщение.
SocFishing
На сайте с 26.09.2013
Offline
118
#5

Ну и в добавок, хотя и без этого должно работать.

$sYandexUrl = 'https://yandex.ru/search/xml?user=МОЙ_ЛОГИН&key=МОЙ_КЛЮЧ&query='.urlencode('привет как дела');
★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
S3
На сайте с 29.03.2012
Offline
349
#6

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


<!DOCTYPE html>
<html>
<head>


<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">


</head>
<body>
<?php
/**
* Created by PhpStorm.
* User: viachaslau
* Date: 31.07.15
* Time: 10:35
*/




function curl_file_get_contents($fp_url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $fp_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$fp = curl_exec($ch);
curl_close($ch);
return $fp;
}

$our_domain = "www.rentalcar.by";

$keywords = '
поисковые фразы через запятую

';

$keywords = explode(",",$keywords);
$res = Array();

echo '<h2 align="center">Наши позиции</h2>';

echo '<table border="1" cellpadding="4" cellspacing="0">';
foreach ($keywords as $keyword) {

$params = array(
'user' => 'login', // логин
'key' => 'key', // ключ Яндекс.XML
'filter' => 'none',
'groupby' => 'attr=d.mode=deep.groups-on-page=100', // attr=<служебный атрибут>.mode=<тип группировки>.groups-on-page=<количество групп на одной странице>.docs-in-group=<количество документов в каждой группе>
'query' => urlencode($keyword)
//'lr' => 6
);


$url = "https://yandex.ru/search/xml?" . urldecode(http_build_query($params));

$fp = curl_file_get_contents($url); // для CURL
// $fp = file_get_contents($url); // если CURL не установлен

$xml = @simplexml_load_string($fp,'SimpleXMLElement', LIBXML_NOCDATA);

$results = Array(); $i=0; $found = false; $found_index = "";
foreach ($xml->response->results->grouping->group as $group) {
$results[] = Array('domain' => trim($group->doc->domain), 'url' => trim($group->doc->url),'title' => $group->doc->title);
if ($results[$i]['domain'] == $our_domain) { $found = true; $found_index = $i; }
$i++;
}
$res[] = $results;

echo '<tr>';
if ($found) {
echo '<td><a href="'.$results[$found_index]['url'].'">'.urldecode($params['query'])."</a></td><td>" . (($found) ? ($found_index+1) : ">100") ."</td>";
$title = preg_replace("!<hlword>(.*?)</hlword>!si","<b>\\1</b>",$results[$found_index]['title']->asXML());
$title = preg_replace("!<title>(.*?)</title>!si","\\1",$title);
echo '<td>'.$title.'</td>';

}
else {
echo '<td>'.urldecode($params['query'])."</td><td>" . (($found) ? ($found_index+1) : ">100") ."</td>";
echo '<td>&nbsp;</td>';
}

echo '</tr>';
echo "\r\n";

}
echo '</table><p>';

$i=0;
foreach ($keywords as $keyword) {
echo '<h2 align="center">'.$keyword.'</h2>';
echo "\r\n";
echo '<table border="1" cellpadding="4" cellspacing="0">';

$j=0;
foreach ($res[$i] as $r) {
echo '<tr>';
echo '<td><a href="'.$r['url'].'">'.$r['domain']."</a></td><td>" . intval($j+1) ."</td>";
$title = preg_replace("!<hlword>(.*?)</hlword>!si","<b>\\1</b>",$r['title']->asXML());
$title = preg_replace("!<title>(.*?)</title>!si","\\1",$title);
echo '<td>',$title.'</td>';
$j++;
echo '</tr>';
echo "\r\n";

}
$i++;
echo '</table><p>';
}
?>
</body>
</html>
TF-Studio
На сайте с 17.08.2010
Offline
334
#7

http используйте и всё.

я у себя именно так делаю

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий