PHP - 使用fsockopen(skype用户名检查)获取页面内容?

时间:2013-08-16 02:46:18

标签: php validation skype fsockopen

我的服务器上只有 fsockopen 才能使用。我的意思是我不能使用cURL或file_get_contents。我顺便使用 PHP

我想要一个Skype用户名验证,所以我从另一个主题找到了这个链接:

https://login.skype.com/json/validator?new_username=anyUserName

此页面响应为JSON输出的有效或无效用户名: 的 { “状态”:200, “STATUS_TEXT”: “有效”, “数据”:{ “标记”: “”, “替代”:假 “fieldDetails”: “”}}

它表示有效,因此该用户名不存在。我可能会解析这些数据以确定它是否正确。

我的问题是,如何通过fsockopen 获取此https页面内容,我可以打开我尝试读取数据的套接字,但是我失败了很多次,因为我从论坛获得了许多片段。因为我不知道怎么做,即使你不能写代码,请告诉我或给我一个方法去做?

基本上,如何使用PHP中的fsockopen 返回skype id状态,我很乐意收到评论,先谢谢你们。

1 个答案:

答案 0 :(得分:0)

如果你的php中有openssl,你应该能够在主机名或ip前加'ssl://''tls://'前缀一个正确的端口号,php应该处理其余的。所以就像这样:

fsockopen('ssl://78.141.177.180', 443, $errno, $errstr);

并像往常一样使用返回的资源。 我自己在没有可用的卷曲时使用下面的函数(从php.net comment挽救的代码并按摩了一点)。称之为

not_curl_get('login.skype.com/json/validator?new_username=foo', 'ssl://', 443)

功能本身:

function not_curl_get($url, $protocol = '', $port = 80, $options = array()) {
    $options = array_merge(array(
        'follow_location'      => true,
        'return_response_part' => 'body',
        'referer'              => false,
        'user_agent'           => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; hu; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)',
        'cookie_file'          => false,
        'request_type'         => 'get',
    ), $options);

    global $_NOT_CURL_GET_OLDHEADER;
    $url = str_replace("http://","",$url);
    if (preg_match("#/#","$url")){
        $page = $url;
        $url = @explode("/",$url);
        $url = $url[0];
        $page = str_replace($url,"",$page);
        if (!$page || $page == ""){
            $page = "/";
        }
        $ip = gethostbyname($url);
    }else{
        $ip = gethostbyname($url);
        $page = "/";
    }
    $open = fsockopen($protocol.$ip, $port, $errno, $errstr, 60);
    if ($options['request_type'] === 'post'){
        $send = "POST $page HTTP/1.0\r\n";
    }else{
        $send = "GET $page HTTP/1.0\r\n";
    }
    $send .= "Host: $url\r\n";
    if ($options['referer']){
        $send .= "Referer: ".$options['referer']."\r\n";
    }
    if ($options['cookie_file']){
        if (@file_exists($options['cookie_file'])){
            $cookie = urldecode(@file_get_contents($options['cookie_file']));
            if ($cookie){
                $send .= "Cookie: $cookie\r\n";
                $add = @fopen($options['cookie_file'],'w');
                fwrite($add,"");
                fclose($add);
            }
        }
    }
    $send .= "Accept-Language: en-us, en;q=0.50\r\n";
    if ($options['user_agent']){
        $send .= "User-Agent: ".$options['user_agent']."\r\n";
    }
    if ($options['request_type']){
        $send .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $send .= "Content-Length: " .strlen($options['request_type']) ."\r\n\r\n";
        $send .= $options['request_type'];
    }else{
        $send .= "Connection: Close\r\n\r\n";
    }
    fputs($open, $send);
    $return = '';
    while (!feof($open)) {
        $return .= fgets($open, 4096);
    }
    fclose($open);
    $return = @explode("\r\n\r\n",$return,2);
    $header = $return[0];
    if ($options['cookie_file']){
        if (preg_match("/Set\-Cookie\: /i","$header")){
            $cookie = @explode("Set-Cookie: ",$header,2);
            $cookie = $cookie[1];
            $cookie = explode("\r",$cookie);
            $cookie = $cookie[0];
            $cookie = str_replace("path=/","",$cookie[0]);
            $add = @fopen($options['cookie_file'],'a');
            fwrite($add,$cookie,strlen($read));
            fclose($add);
        }
    }
    if ($_NOT_CURL_GET_OLDHEADER){
        $header = "$_NOT_CURL_GET_OLDHEADER<br /><br />\n$header";
    }
    if ($return[1]){
        $body = $return[1];
    }else{
        $body = "";
    }
    if ($options['return_response_part'] === 'body'){
        $return = $body;
    }
    if ($options['return_response_part'] === 'head'){
        $return = $header;
    }
    if ($options['return_response_part'] === 'all'){
        $return = "$header$body";
    }
    if ($options['follow_location']){
        if (preg_match("/Location\:/","$header")){
            $url = @explode("Location: ",$header);
            $url = $url[1];
            $url = @explode("\r",$url);
            $url = $url[0];
            $_NOT_CURL_GET_OLDHEADER = str_replace("\r\n\r\n","",$header);
            $l = "&#76&#111&#99&#97&#116&#105&#111&#110&#58";
            $_NOT_CURL_GET_OLDHEADER = str_replace("Location:",$l,$_NOT_CURL_GET_OLDHEADER);
            return not_curl_get($url, $protocol, $port, $options);
        }else{
            return $return;
        }
    }else{
        return $return;
    }
}