我有一个PHP脚本,它使用CURL登录到带有简单登录页面的站点。它将初始请求发送到站点,并查看其是否已经登录(由于cookie)或登录页面是否出现-如果已登录,则登录。
但是,最近我注意到,每次脚本运行时,它都永远不会登录。使用VERBOSE深入探查头表明,从未使用过COOKIEFILE / COOKIEJAR中的cookie,只有站点为该特定会话接收的cookie 。如果我在运行过程中将cookie手动添加到cookiejar中(以前可以正常工作)-它不再起作用,因为实际上并未使用COOKIEFILE中的cookie。
这在本地和生产服务器上都发生,这意味着这似乎不是系统问题。我为其他登录页面创建了具有相同结果的测试版本。我使用cookie文件的完整路径(使用cookie更新,但未使用),并使用curl_close()。
以下是CURL函数:
private function curlPage($url, $postParameters) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postParameters);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__.'/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__.'/cookie.txt');
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POSTREDIR, 3);
if ($this->verbose == 1) curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->defaultTimeout);
curl_setopt($ch, CURLOPT_USERAGENT, $this->useragent);
$pageResponse = curl_exec($ch);
curl_close($ch);
return $pageResponse;
}
Run Code Online (Sandbox Code Playgroud)
以下是CURL请求对主页的详细响应,应该检查该页面是否已登录。由于该站点是客户端站点,因此我对其进行了编辑。
* Rebuilt URL to: *********
* Hostname was NOT found in DNS cache
* Trying : *********...
* Connected to : ********* (*********) port 80 (#0)
> GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.6.3 (KHTML, like Gecko) Version/8.0.6 Safari/600.6.3
Host: *********
Accept: */*
< HTTP/1.1 200 OK
< Date: Wed, 20 Jul 2016 20:42:22 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< Keep-Alive: timeout=15
< Vary: Accept-Encoding
< Expires: Mon, 26 Jul 1980 00:00:00 GMT
< Pragma: no-cache
< Cache-Control: no-cache, no-store, must-revalidate
* Server ********* is not blacklisted
< Server: *********
<
Run Code Online (Sandbox Code Playgroud)
可以看出-尽管有可用的COOKIEFILE,但看不到cookie。
任何协助将不胜感激。
首先,您必须确保__DIR__具有写权限。
运行代码时的第二个。您可以检查cookie.txt文件是否已创建。
第三,您必须在所有会话中使用一个cookie。因此受害者知道您已登录。
并尝试我的来源
$cookies = tempnam('/tmp','cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8539 次 |
| 最近记录: |