【问题标题】:php socket programming with auth带身份验证的 php 套接字编程
【发布时间】:2014-03-24 10:00:16
【问题描述】:

我想使用 Socket 编程从远程服务器读取文件,但服务器受 http_auth 保护

即使提供 tcp://username: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);
}

【问题讨论】:

    标签: php sockets authentication tcp


    【解决方案1】:

    首先,您的 TCP 字符串中有一个错字:

    " tcp://username:passwrod@hostname.com:80" 
    

    应该是

    "tcp://username:password@hostname.com:80"
    

    就其本身而言,URI 开头的额外空间将导致 yourstream_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。
    • 检查服务器的代理设置

    【讨论】:

    • 不要有任何不同,我测试了两者,结果相同;)
    【解决方案2】:

    试试这个:

    <?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);
    ?>
    

    【讨论】:

    • 我收到这个错误代码 WWW-Authenticate: Basic realm="MultiShare Login" 401
    • 代码运行良好 - 身份验证失败。您是否已将用户名:密码替换为正确的凭据?尝试在浏览器中使用相同的。还可以尝试添加 Host 标头。
    猜你喜欢
    • 2021-04-22
    • 2014-04-21
    • 1970-01-01
    • 2012-02-04
    • 2014-02-20
    • 2015-01-15
    • 2016-04-30
    • 2012-12-15
    • 2014-11-15
    相关资源
    最近更新 更多