2015-05-13 3 views
2

Система солнечного мониторинга создает страницу на http://68.37.209.78:8050/ с данными о реальном времени. Я хочу очистить и проанализировать эти данные, передать переменные PHP в переменные JavaScript, которые я могу передать в HighCharts, чтобы сделать красивые графики.PHP загрузка данных из внешнего URL-адреса с нестандартным портом

До сих пор мне удалось выяснить, как использовать PHP для чтения внешнего файла с помощью file_get_contents() или fopen(). Похоже, что ни одна из этих функций не будет работать, если это нестандартный порт, к которому я пытаюсь получить доступ, как в данном случае. Я нашел альтернативный метод, использующий Curl():

<?php 
 
$cURL = curl_init('http://68.37.209.78'); //Initialise cURL with the URL to connect to 
 
curl_setopt($cURL, CURLOPT_PORT, 8050); //Set the port to connect to 
 
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 8050); //Get cURL to return the HTML from the curl_exec function 
 
$HTML = curl_exec($cURL); //Execute the request and store the result in $HTML 
 

 
echo $HTML; //Output the HTML 
 
?>

Когда я пытаюсь запустить это, страница, кажется, не хотят даже нагрузки. Если я изменил URL-адрес на какой-то произвольный адрес и изменил порт на 80, скрипт отлично работает. Где я неправ??

+0

Пытались ли вы инициализировать локон без HTTP: //? Вы проверяли, загружены ли библиотеки curl в вашей среде? –

+0

Благодарим вас за предложение. Да, я пробовал это без http: //, и это все еще не сработало. Я знаю, что библиотеки curl загружаются, потому что я могу подставить http://www.google.com для URL-адреса и указать порт 80, и, конечно же, он перекликается с текстом с сайта. –

+0

Ваш код отлично подходит для меня. Добавьте это и посмотрите, что произойдет: 'if (curl_errno ($ ch)) { echo 'Curl error:'. curl_error ($ ч); } ' – Jaime

ответ

0

Вы уверены, что можете получить доступ к этому порту со своего сервера? Попробуйте выполнить эту команду в консоли, должны быть одинаковыми для Linux или Windows:

curl -i -XGET http://68.37.209.78:8050 

HTTP/1.1 200 OK 
Content-Type: text/plain 
Date: Wed, 13 May 2015 23:39:55 GMT 
Connection: keep-alive 
Transfer-Encoding: chunked 

Power Panel 1.2 (Solar2X5B.js) 
(C) W/M^2--(C)-- L/M 
OAT PYRA HXI HXO FLW 
21 55 16 22 3 

     SIGN  TEMP(C) W/M^2 (%) (A) (%) (A) STATS -----LEVEL----- 
ID SOH dBm VERSN PNL TNK Sgain PNL PNL TNK TNK PL TK PLH PLL TKH TKL HT 
01 1 -89 1.48 15 19 52 0 0 0 0 04 00 0 0 0 1 0 
02 1 -93 1.48 16 27 17 0 0 0 0 04 00 0 0 0 1 0 
03 1 -82 1.48 18 23 35 0 0 0 0 24 00 0 0 0 1 0 
04 1 -95 1.48 16 20 48 0 0 0 0 1C 1C 0 0 0 1 0 

Возможно, существуют некоторые правила брандмауэра блокирует доступ. Вы можете использовать curl -v для еще более подробного вывода отладки.

http://curl.haxx.se/download.html < - завиток для различных платформ

+0

Хорошее предложение! Может быть curl_setopt ($ cURL, CURLOPT_RETURNTRANSFER, 8050); необходимо изменить на curl_setopt ($ cURL, CURLOPT_RETURNTRANSFER, 80); –

+0

Вы говорите, что если порт 8050 заблокирован в моей серверной среде, это не сработает? В любом случае, я попытался ввести указанный вами код и ничего. Когда я сменил его на curl -i -XGET http://www.google.com, я получил целую кучу вещей, которые отплевывались на меня. –

+0

CURLOPT_RETURNTRANSFER - это просто логический, а не номер порта. – Jaime

Смежные вопросы