php curl-使用相同的cookie访问iframe src

php curl-使用相同的cookie访问iframe src,php,curl,Php,Curl,我遇到了这个问题: 我正在访问一个页面,比如说“”,它;s使用身份验证,我传递身份验证。所以一切都没问题,但是页面有一个iframe,并且iframe源只有在传递main的页面auth时才可访问,因此,当auth之后,我尝试作为单独的页面访问iframe的src时,它失败了,并且它说我没有登录。以下是代码示例: public $curl; public $url = "http://my-page.com/"; public $loginName = "loginName";

我遇到了这个问题:

我正在访问一个页面,比如说“”,它;s使用身份验证,我传递身份验证。所以一切都没问题,但是页面有一个iframe,并且iframe源只有在传递main的页面auth时才可访问,因此,当auth之后,我尝试作为单独的页面访问iframe的src时,它失败了,并且它说我没有登录。以下是代码示例:

   public $curl;
   public $url = "http://my-page.com/";
   public $loginName = "loginName";
   public $loginPassword = "pwdkjojdf";

    public function requstIframe() {
        $r = [
            '__EVENTTARGET' => '',
            '__EVENTARGUMENT' => '',
            '__VIEWSTATE' => '/wEPDwULLTExNDk5OTk1NTAPZBYCZg9kFgICAQ9kFgQCAQ88KwANAQAPFgIeC18hRGF0YUJvdW5kZ2RkAgQPDxYCHgRUZXh0BRAoU2VydmVkIGJ5IHd3dzEpZGRkfTiA/PvIVryBc6c20gH5cnLW0Ec=', //'/wEPDwULLTExNDk5OTk1NTAPZBYCZg9kFgICAQ9kFgQCAQ88KwANAQAPFgIeC18hRGF0YUJvdW5kZ2RkAgQPDxYCHgRUZXh0BRAoU2VydmVkIGJ5IHd3dzEpZGRkfTiA/PvIVryBc6c20gH5cnLW0Ec=',
            '__VIEWSTATEGENERATOR' => 'CA0B0334',
            '__PREVIOUSPAGE' => '1Cn2CuxagyuY2V7hXmPg2NQ6W2Ov92BIEUHfsC5ZCJeAgWcgn5yoZLzxlVfS568UGx9I2Tf3gSiSmfNeiz-PxfjLSFQ1',
            '__LASTFOCUS' => '',
            'ctl00$LoginView1$Login1$UserName' => $this->loginName,
            'ctl00$LoginView1$Login1$Password' => $this->loginPassword,
            'ctl00$LoginView1$Login1$LoginButton' => 'Enter',
            'aspnetForm' => ''
        ];

        $r = http_build_query($r);

        $this->curl = curl_init();
        curl_setopt($this->curl, CURLOPT_URL, $this->url);
        curl_setopt($this->curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($this->curl, CURLOPT_POST, true);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $r);
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->curl, CURLOPT_COOKIESESSION, true);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($this->curl, CURLOPT_COOKIEJAR, __DIR__.'/tmp.txt');  
        curl_setopt($this->curl, CURLOPT_COOKIEFILE, __DIR__.'/tmp.txt'); 
        curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($this->curl, CURLOPT_VERBOSE, true);

        curl_exec($this->curl);

        curl_setopt($this->curl, CURLOPT_URL, 'https://www.iframe-source-url.com/');

        $response = curl_exec($this->curl);
    }

你知道为什么会这样吗?

在第一个
curl\u exec($this->curl)之后
关闭
$curl
手柄。然后使用所有相同的参数重新初始化它。然后调用Iframe链接。如果不关闭curl句柄,它将不会对cookie文件运行任何内容

curl_close($this->curl);
$this->curl = curl_init();
... set other params here! again
curl_setopt($this->curl, CURLOPT_URL, 'https://www.iframe-source-url.com/');

当您使用详细模式时,我相信您可以看到在第二个curl请求期间没有发送cookie,但是从您的第一个响应中,您已经在http响应头中看到了一些
Set cookie

在第一个
curl\u exec($this->curl)之后
关闭
$curl
手柄。然后使用所有相同的参数重新初始化它。然后调用Iframe链接。如果不关闭curl句柄,它将不会对cookie文件运行任何内容

curl_close($this->curl);
$this->curl = curl_init();
... set other params here! again
curl_setopt($this->curl, CURLOPT_URL, 'https://www.iframe-source-url.com/');

当您使用详细模式时,我相信您可以看到在第二个curl请求期间没有发送cookie,但是从您的第一个响应中,您已经在http响应头中看到了一些
设置cookie

1)您可以写入
\uu DIR.'/tmp.txt'
?2) 您是否有一个适用于所有用户的Cookie文件?3) 你需要传递任何初始cookie吗?是的,我可以写入“DIR.”/tmp.txt“是的,我有一个cookie文件供所有用户使用,不需要传递初始cookie。凯,我看到我没有将ASPXAUTH传递给框架src,但当访问主页时,它就在那里,这就是为什么它不能用相同的访问数据打开它的原因——可能是因为它没有帮助,我手动设置了.ASPXAUTH,加载了存储的cookie文件,但无论如何它不能正常工作1)你能写到
\uu DIR.'/tmp.txt'
?2) 您是否有一个适用于所有用户的Cookie文件?3) 你需要传递任何初始cookie吗?是的,我可以写入“DIR.”/tmp.txt“是的,我有一个cookie文件供所有用户使用,不需要传递初始cookie。凯,我看到我没有将ASPXAUTH传递给框架src,但当访问主页时,它就在那里,这就是为什么不能用相同的访问数据打开它的原因-可能它没有帮助,我手动设置了.ASPXAUTH,我加载了存储的cookie文件,但无论如何它不工作,因为它应该按照您所说的方式重新初始化,但无论如何问题仍然是一样的,在开发者工具>资源>cookies中,我注意到有两个cookie存储,它们来自主网站和iframe源,但是当我将cookies保存到文件时,只有来自主网站的cookies,而不是来自iframe源的cookies,这就是为什么它总是失败的原因。那么,如何修复cookie文件,以存储所有cookie的方式修复cookie文件,而不仅仅是从主源文件修复cookie文件呢?我按照您所说的方式重新初始化了cookie文件,但问题仍然是一样的。同样,在开发者工具>资源>cookie文件中,我注意到有两个cookie存储,它们分别来自主网站和iframe源文件,但是当我将cookie保存到文件时,只有来自主web的cookie,而不是来自iframe源的cookie,这就是为什么它总是失败的原因。那么,你知道如何修复这个cookie文件来存储所有cookie,而不仅仅是来自主源的cookie吗