Здравствуйте, У меня есть устройство Ethernet, которое я могу запросить через браузер или Linux Curl без проблем, это ответ, который я получаю с завитком. Ответ представлен в простой XML-нотации. URL, чтобы получить устройство, чтобы ответить на это http://mydevice.com/state.xml?noReply=0php http GET команда не работает
[email protected]:/home/dave/www$ curl -v -0 http://mydevice.com/state.xml?noReply=0
* About to connect() to mydevice.com port 80 (#0)
* Trying mydevice.com... connected
> GET /state.xml?noReply=0 HTTP/1.0
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: mydevice.com
> Accept: */*
>
<?xml version="1.0" encoding="utf-8"?>
<datavalues>
<relaystate>0</relaystate>
<inputstate>0</inputstate>
<rebootstate>0</rebootstate>
<totalreboots>0</totalreboots>
* Connection #0 to host mydevice.com left intact
* Closing connection #0
Но когда я использую этот PHP код не работает, Есть некоторые отладочная информация в этом коде. Код работает, если я укажу его на www.example.com, я исчерпал поиск Google без подсказок и т. Д. ... Я даже упростил массив PHP http, чтобы использовать только то, что использует Linux Curl, но по-прежнему нет ответа с устройства , Просьба сообщить.
--------------------- PHP код ------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
$xml_status = 'http://mydevice.com/state.xml?noReply=0';
$test1 = 'http://www.example.com/';
$myURL = $xml_status;
//$myURL = $test1;
function aa_dump($type = "NoNameGiven", $input1)
{
echo "<pre>\r\n";
echo "---DEBUG-------- Printing $type ---------------\r\n";
var_dump($input1);
echo "\r\n--------------------------\r\n";
}
// this will break the URL into
// [scheme] => http
// [host] => www.example.com
// [path] => /foo/bar
// [query] => hat=bowler&accessory=cane
$aa_arrayURL = parse_url($myURL);
aa_dump("URL structure", $aa_arrayURL);
$aa_host = $aa_arrayURL['host'];
$aa_path = $aa_arrayURL['path'];
$aa_query = $aa_arrayURL['query'];
file_get_contents($myURL);
aa_dump("file_get_content $myURL", $http_response_header);
//$postdata = http_build_query(array('noReply' => '0'));
//aa_dump('postdata', $postdata);
$params = array('http' => array('method' => "GET",
'header' => array("Host: $aa_host",
"Content-Type: text/html",
"Accept: */*",
"Accept-Encoding: gzip, deflate",
"Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7",
"Accept-Language: en-US",
"Connection: close",
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"),
'timeout' => '2',
'max_redirects' => '0',
'ignore_errors' => '1',
'Request_fulluri' => 'TRUE',
'content' => "{$aa_path}?{$aa_query}")
);
aa_dump('params', $params);
// workaround for php bug where http headers don't get sent in php 5.2
if(version_compare(PHP_VERSION, '5.3.0') == -1){
ini_set('user_agent', 'PHP-SOAP/' . PHP_VERSION . "\r\n" . $params['http']['header']);
}
$context = stream_context_create($params);
$homepage = file_get_contents($myURL, false, $context);
aa_dump('homepage', $homepage);
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Status</title>
</head>
<body>
<hr />
<p>In body of HTML now</p>
<p>Status...</p>
<?php
print("<p>headers_list</p>");
var_dump(headers_list());
print("<p>homepage</p>");
if(strlen($homepage) == 0)
{
echo '<p><font color="red">string came back empty</font></p>';
}
else
{
echo '<p>string has value</p>';
$xml = simplexml_load_string($homepage);
echo '<pre>homepage: '.$homepage.'</pre>';
echo '<pre>XML 1: '.$xml.'</pre>';
}
?>
</body>
</html>
Мне кажется, не хватало: '$ http_response_header = $ myURL = file_get_contents ($ myURL);' перед последней строкой. – Zini
Извините, я новичок в PHP, вы можете объяснить, что вы имеете в виду? Я поставил свой примерный PHP-код на чтение руководств по PHP в Интернете. Где строка "$ http_response_header = $ myURL = file_get_contents ($ myURL);" идет и что он делает? – user2679455
Если вы можете запросить устройство с помощью команды Linux Curl, вы сможете сделать это из PHP с помощью PHP 'curl' extension. Будут ли другие оболочки работать, зависит от вашей конфигурации PHP. Если вы не получаете ответа, возможно, PHP не делает то, что вы думаете. Посмотрите на журналы ошибок сервера. –