Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有验证码的网页?_Php_Session_Curl_Cookies_Captcha - Fatal编程技术网

Php 有验证码的网页?

Php 有验证码的网页?,php,session,curl,cookies,captcha,Php,Session,Curl,Cookies,Captcha,我试图卷曲一个网页,其中有验证码,然后我得到的图像,并显示给用户,然后提交,但我得到了会话过期错误。甚至没有不正确的验证码错误 $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"); curl_setopt($ch, CURLOPT_URL, $url)

我试图卷曲一个网页,其中有验证码,然后我得到的图像,并显示给用户,然后提交,但我得到了会话过期错误。甚至没有不正确的验证码错误

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 10.0; WOW64; rv:45.0)     Gecko/20100101 Firefox/45.0"); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$cookies = array();
foreach($matches[1] as $item) {
parse_str($item, $cookie);
$cookies = array_merge($cookies, $cookie);
}
如果提交了代码

if(isset($_POST['submit'])) {
curl_setopt($ch, CURLOPT_URL, $url1); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo); 
foreach($cookies as $key => $val) {
curl_setopt($ch, CURLOPT_COOKIE, $key.'='.$cookie);
}

我正在尝试internet上的几乎所有功能,但我无法管理任何功能。

在foreach$cookies循环中,每次后续调用都将覆盖您在上一次迭代中设置的cookie,因此最终您将发送一个cookie值。curl可以为您处理cookies,所以最好让它来处理。实际上只有一个cookie url FALSE/FALSE 0 phpSess_RANDOM RANDOM 2很难看到发生了什么,因为代码不完整。在第二个示例中,
$cookies
来自哪里?除非您将它们存储在某个地方,否则这可能是一个与第一个请求不同的cookie。与其尝试自己做cookie,不如使用
CURLOPT_-COOKIEFILE
CURLOPT_-COOKIEJAR
选项,以便
curl
自动完成。这也会导致会话过期