Есть ли способ получить данные с веб-сайта / приложения, которое не предлагает открытых API - PullRequest
0 голосов
/ 05 июля 2019

Допустим, например, я создаю приложение, в котором пользователь ищет рубашку на основе своего кода UPC.Работа приложения заключается в том, чтобы найти эту рубашку в других магазинах.У продавца А есть API, который можно легко использовать для поиска товара.Однако у продавца B нет API, открытого для разработчиков.

Как разработчик будет обращаться с продавцом B?

Идеи, которые я выдвинул, были:

  • Используйте браузер без головы, чтобы загрузить веб-сайт продавца B, выполнить поиск и сканировать веб-страницу.(Звучит ужасно)
  • Используйте браузер без головы, чтобы загрузить веб-сайт продавца B, выполнить поиск, перехватить сетевой трафик.(Лучше, но все же не замечательно)

Кто-нибудь сталкивался с этим раньше или кто-нибудь знает о существующей технологии или методе решения этой проблемы?Я никогда не понимал, как вы будете обрабатывать данные без использования API.

1 Ответ

0 голосов
/ 08 июля 2019

Вот что я сделал в php, используя curl.Это должно помочь вам начать.

$url = 'https://newjersey.xxxxxx.net/login';
$cookie="cookie.txt";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt ($ch, CURLOPT_VERBOSE, true);

$result = curl_exec ($ch);
preg_match('/meta content="([^"]+)" name="csrf-token"/', $result, $matches);
$token = $matches[1];
$creds['authenticity_token'] = $token;

print "login page with token $token\n";

curl_setopt ($ch, CURLOPT_URL, 'https://newjersey.xxxxx.net/auth/identity/callback');
curl_setopt ($ch, CURLOPT_POSTFIELDS, http_build_query($creds));
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);

После входа в систему вы можете использовать регулярные выражения для получения данных, которые вы ищете.

...