用auth进行php套接字编程

时间:2014-02-22 19:00:05

标签: php sockets authentication tcp

我想通过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);
}

2 个答案:

答案 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是有效的网址
  • 在您的服务器上正确配置了DNS服务(尝试运行一些应该可以正常运行的简单服务,例如$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);
?>