Closed ChenZhongPu closed 4 years ago
PHP有几个函数不支持https,你可以尝试用curl然后curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
@Captain-D 我尝试了你说的方法,下面是更新后的代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://passport.baidu.com/v2/?regphonecheck&phone=18789482356");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER,array('User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',
'Host:passport.baidu.com'));
curl_exec($ch);
输出还是 {"errno":110000,"index":null,"errmsg":"\u6210\u529f"}
.
补充,奇怪的是请求58同城的,可以成功:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://passport.58.com/ajax/checkemail?email=2453085348%40qq.com");
//curl_setopt($ch, CURLOPT_HTTPHEADER,array('Host:passport.58.com'));
//curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6');
curl_exec($ch);
甚至不需要设置请求头。
我又试了当当的,也不需要请求头,也成功了:
curl_setopt($ch, CURLOPT_URL,"https://login.dangdang.com/p/email_checker.php");
curl_setopt($ch, CURLOPT_POST, true);
$data = array('email' => '18789482356@163.com');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//curl_setopt($ch, CURLOPT_HTTPHEADER,array('Host:passport.58.com'));
//curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6');
curl_exec($ch);
那百度的为什么不行?
百度应该是某种方法做了人机验证的
我在浏览器里面访问 https://passport.baidu.com/v2/?regphonecheck&phone=18789482356, 得到的返回信息是:
但在PHP里面请求时,错误代码是
({"errno":110000,"index":null,"errmsg":"\u6210\u529f"})
。(这个Unicode是成功的意思)。我应该是请求头构造错了。请问,这个请求头应该怎么构造?