Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Пример использования API clck.ru может кто привести? (https://javascript.ru/forum/misc/68433-primer-ispolzovaniya-api-clck-ru-mozhet-kto-privesti.html)

AleksSergSB 16.04.2017 16:46

Пример использования API clck.ru может кто привести?
 
Добрый!
Хочу наладить API на clck.ru но меня систематически валит ошибка:

XMLHttpRequest cannot load https://clck.ru/--?url=https://learn...hr-crossdomain. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;

var xhr = new XHR();
xhr.open('GET', 'https://clck.ru/--?url=https://learn.javascript.ru/xhr-crossdomain', true);

//xhr.onload = function() {
 // console.log( this.responseText );
//}

//xhr.onerror = function() {
//  console.log( 'Ошибка ' + this.status );
//}

xhr.send();

Я что-то не пойму как использовать этот сервис.
Читал статью на которую пытаюсь сделать короткую статью. Явного примера там нет. По моему уже все перепробовал.

AleksSergSB 16.04.2017 17:48

Цитата:

Сообщение от Rise (Сообщение 450130)
AleksSergSB, это для сайта или расширения?

На своем сайте такой код вставляю.

AleksSergSB 16.04.2017 18:31

Цитата:

Сообщение от Rise (Сообщение 450133)
AleksSergSB, тогда через свой сервер только, если php смотри пример с file_get_contents.

Извините, не понял, что значит только через свой сервер?
Я хотел все сделать на javascript без php.

Насколько я понимаю ошибка "No 'Access-Control-Allow-Origin' " связана с заголовками которые отклоняет сервер на который я стучусь. Но не пойму как это исправить. Api ведь открытое, чего он отклоняет... :(

laimas 16.04.2017 18:37

CORS для простых запросов

AleksSergSB 16.04.2017 19:15

Цитата:

Сообщение от laimas (Сообщение 450137)

Спасибо, читал. Можно пример?

AleksSergSB 16.04.2017 19:21

Цитата:

Сообщение от Rise (Сообщение 450138)
AleksSergSB, но Api не открыто для XMLHttpRequest в контексте сайта.

"Приплыли тапочки к дивану"©
В общем методами только javascript достучаться до данного API не представляется возможным?

AleksSergSB 18.04.2017 21:06

Цитата:

Сообщение от Rise (Сообщение 450142)
AleksSergSB, с сайта в браузере - нет, с сайта на сервере или с расширения в браузере - да. Пример:
var url = 'https://learn.javascript.ru/xhr-crossdomain';
// ...
xhr.open('GET', '/proxy.php?url=' + encodeURIComponent(url), true);
// ...

<?php // proxy.php

$url = filter_input(INPUT_GET, "url", FILTER_VALIDATE_URL);

empty($url) and exit("INVALID_URL");

echo file_get_contents("https://clck.ru/--?url=".urlencode($url));

Спасибо!

Чтобы заработал запрос echo file_get_contents("https://clck.ru/--?url="); в котором имел наглость появится hhtpS нужно в php.ini прописать:
extension=php_openssl.dll
allow_url_fopen = On

а файл php_openssl.dll разумеется заблаговременно найти и скачать.
Иначе будет ошибка : unable to find the wrapper

Появилась другая проблемка. Функция file_get_contents(); отказывается принимать строку в которой после ?url= присутствует хотя бы один "/" вываливает сразу php_network_getaddresses: getaddrinfo failed
Весь "цимус" ушел))

Подскажите пожалуйста, есть какая альтернатива?

laimas 18.04.2017 21:19

Цитата:

Сообщение от AleksSergSB
а файл php_openssl.dll разумеется заблаговременно найти и скачать

Вообще-то данная библиотека наряду с другими вход в набор расширений для каждой конкретной версии, искать чего-то не надо.

Цитата:

Сообщение от AleksSergSB
Функция file_get_contents(); отказывается принимать строку в которой после ?url= присутствует хотя бы один "/"

file_get_contents не имеет к этому отношения - адреса url кодируют прежде чем отправляются, rawurlencode().

AleksSergSB 22.04.2017 17:09

Цитата:

Сообщение от Rise (Сообщение 450269)
Разве пример не работает, ведь там целых три слэша 'https://learn.javascript.ru/xhr-crossdomain'?

Даа, работает. Ошибку сам допустил, нашел.

Наверное не в ту тему. Но не подскажите как потом красиво передать результат обратно в js ?
Вариант var a = '<?php echo $rez; ?>'; выдает <?php echo $rez; ?>

AleksSergSB 22.04.2017 18:15

var xhr = new XMLHttpRequest();
  var url = 'https://learn.javascript.ru/xhr-crossdomain';
  xhr.open('GET', '/test.php?url=' + encodeURIComponent(url), true);
  xhr.send();
Честно говоря не понимаю как ловить результат..

AleksSergSB 22.04.2017 18:34

var xhr = new XMLHttpRequest();
  var url = 'https://learn.javascript.ru/xhr-crossdomain';
  xhr.open('GET', '/test.php?url=' + encodeURIComponent(url), true);
  xhr.onreadystatechange = function(){
      console.log(xhr.status);
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
            console.log("результат: "+xhr.responseText);
        }
      }
  }
  xhr.send();

Все получил.
Спасибо Rise!

AleksSergSB 22.04.2017 18:35

Плюсануть не могу, говорит последний раз вас же плюсавал, нужно сначала кого-нибудь другого)))))))


Часовой пояс GMT +3, время: 00:39.