我想通过Socket编程从远程服务器读取文件,但是使用http_auth
保护服务器即使提供tcp://用户名:passwrod@hostname.com
,我也无法使套接字工作我收到了这个错误
php_network_getaddresses: getaddrinfo failed: No such host is known. (0)
这是我的代码
$fp = stream_socket_client(" tcp://username:passwrod@hostname.com:80", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: hostname.com\r\nAccept: */*\r\n\r\n");
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
答案 0 :(得分:0)
嗯,首先,你在TCP字符串中输入错字:
" tcp://username:passwrod@hostname.com:80"
应该是
"tcp://username:password@hostname.com:80"
本身,URI开头的额外空间会导致stream_socket_client
调用失败,我想它会导致getaddrinfo
错误,因为如果URI字符串无法解析主机是无效的。此外,即使DNS问题得到解决,身份验证也会失败,因为password
拼写错误为passwrod
。
假设在此之后它仍无效,您应该查看您的DNS设置。 getaddrinfo failed: No such host is known
表示您的服务器无法确定hostname.com
的位置...所以在您开始担心身份验证或端口之前,请确保
hostname.com
是有效的网址$fp = stream_socket_client("tcp://yahoo.com:80", $errno, $errstr, 30); var_dump($fp);
- 如果该调用未返回资源,那么您的DNS服务无法正常运行。 ..或者您可以尝试从服务器ping,看看您是否可以访问www.yahoo.com。答案 1 :(得分:0)
试试这个:
<?php
if(!($fp = fsockopen("hostname", 80)))
{
throw new Exception("Couldn't open socket!\n");
}
fputs($fp, "GET / HTTP/1.0\r\n");
fputs($fp, "Host: hostname\r\n");
fputs($fp, "Authorization: Basic " .
base64_encode("username:password") .
"\r\n");
fputs($fp, "\r\n");
fpassthru($fp);
?>