我使用以下通用代码登录其他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 没有变化
我最近在尝试使用 godaddy 的 curl_exec
使用 twitter
API 时遇到了同样的问题。
神奇的是禁用选项中的对等和主机验证:
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
在发现问题方面非常宝贵。
博士,朋友不要让朋友使用神父。
如果你愿意,你可以试试这个函数。它帮助了我几次。如果您仍然遇到问题,请尝试 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);
}