2

我使用以下通用代码登录其他 https 站点并使用表单提取记录,但它似乎不适用于 www.voip.ms。我已经创建了一个测试帐户,所以如果有人想破解它并告诉我我做错了什么。(警告,该网站只给你的 IP 地址 4 次尝试,直到它禁止它)

<?php
ini_set('max_execution_time', 300);
$username="meahmatt@aol.com"; 
$password="testaccount"; 
$url="https://www.voip.ms/m/login.php"; 
$cookie="cookie.txt"; 

$postdata = "col_email".$username."&col_password=".$password."&action=login&form1="; 

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 
curl_close($ch);
echo $result;
?>

我也试过设置 CURLOPT_SSL_VERIFYPEER, TRUE 没有改变

4

2 回答 2

4

我最近尝试使用来自 godaddy的twitterapi时遇到了同样的问题。curl_exec

神奇的是在选项中禁用对等和主机验证:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // required as godaddy fails
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // required as godaddy fails

错误是证书验证问题。我在非 godaddy 服务器上使用这个确切的脚本没有问题。

CURLE_SSL_CACERT (60)
Peer certificate cannot be authenticated with known CA certificates.

完整的请求如下所示:

  $url = "https://api.twitter.com/1.1/statuses/user_timeline.json?..."
    $headers = array( 
        "Authorization: Bearer ".$bearer."",
    ); 

$ch = curl_init();  // setup a curl
curl_setopt($ch, CURLOPT_URL, $url);  // set url to send to
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // set custom headers
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return data reather than echo
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // required as godaddy fails
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // required as godaddy fails

// $info = curl_getinfo($ch); // debug info
// var_dump($info); // dump curl info

$result = curl_exec($ch); // run the curl

curl_close($ch);  // stop curling

// Check for errors and display the error message
if($errno = curl_errno($ch)) { echo "curlerror::$errno::"; }

还要注意这一点,curl_getinfo并且curl_errno在发现问题方面非常宝贵。

tl;博士,朋友不要让朋友使用 Godaddy。

于 2014-01-09T09:04:07.493 回答
1

如果你愿意,你可以试试这个功能。它帮助了我几次。如果您仍然遇到问题,请尝试使用 fiddler2 (fiddler2.com) 检查所有标头并尝试在 PHP 中复制它们

ini_set('max_execution_time', 300);
$fields['col_email'] = "meahmatt@aol.com"; 
$fields['col_password'] = "testaccount"; 
$fields['action'] = "login"; 
$fields['form1'] = ""; 
$url = "https://www.voip.ms/m/login.php"; 
$html = get_html($url,$url,$fields);

function get_html($url,$ref='',$fields=array(),$cookie='cookie.txt'){
//  $proxyAddress = '127.0.0.1:8888';
    $ch = curl_init();
    touch($cookie);
    $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
    $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    $header[] = "Cache-Control: max-age=0";
    $header[] = "Connection: keep-alive";
    $header[] = "Keep-Alive: 300";
    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $header[] = "Accept-Language: en-us,en;q=0.5";
    $header[] = "Pragma: "; //browsers keep this blank.  
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows;U;Windows NT 5.0;en-US;rv:1.4) Gecko/20030624 Netscape/7.1 (ax)');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    if($proxyAddress != ''){
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
        curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
        curl_setopt($ch, CURLOPT_PROXY, $proxyAddress);
    }
    if(count($fields)>0){
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt ($ch, CURLOPT_POST, 1); 
    }
    curl_setopt($ch, CURLOPT_REFERER, $ref);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
    $result = curl_exec ($ch);
    if(!$result){
        echo "cURL error number:" .curl_errno($ch);
        echo "cURL error:" . curl_error($ch);
        exit;
    }
    curl_close ($ch);
    return($result);
}
于 2013-09-13T15:15:02.723 回答