【发布时间】:2015-04-21 21:48:12
【问题描述】:
我正在尝试使用 cURL 同时将图像保存到文件,同时还返回加载该文件以进行保存时返回的标头。
原因是因为每次加载和/或保存图像时都会生成一个唯一的 cookie,所以如果我保存文件,然后对同一图像 URL 执行另一个请求以获取 cookie,则 cookie不会与保存的图像(它是验证码图像)正确配对。
图像只能加载一次,并且在该图像的单次加载时必须同时保存(无需从服务器重新请求图像)显示标题,以便我可以获取加载和保存图像时生成的 cookie。
这是我到目前为止所得到的,它确实返回了标题并保存了一个文件,但是当以 .jpg 格式查看时,该文件已损坏。如果我将文件类型更改为 .txt,我可以看到标题,但随后会看到一堆乱码,这些字符不是标题下方的图像。所以很明显,正在保存的文件是标题的组合,然后应该是图像,我只是不能单独获取它们,同时确保只有一个图像请求。
function getImageandCookie($ImageURL) {
$rand = rand();
$image_file = $_SERVER['DOCUMENT_ROOT'] . '/image/' . $GLOBALS['id'] . $rand . '.jpg';
$fp = fopen ($image_file, 'w+');
$ch = curl_init($ImageURL);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36');
$data = curl_exec($ch);
curl_close($ch);
fclose($fp);
return $data;
}
更多详情: 我正在尝试将图像保存到服务器上的文件中,同时使加载该图像时返回的标头可用于我的脚本的其余部分。
如果您加载此图像:http://ipv4.google.com/sorry/image?id=2125815723022350864&hl=en,您会看到创建了一个与图像中的文本“绑定”的 cookie。如果您重新加载图像或向同一 URL 发出新请求,则会创建一个新的 cookie 和图像“对”。
所以我需要加载该图像一次并将其保存到文件中,同时抓取标题(因为那是与该特定图像“绑定”的 cookie 所在的位置),同时确保只请求一次图像.
【问题讨论】:
-
我之前发布的答案不起作用,我仍在尝试解决这个问题,只是为了确定,您想将 RESPONSE 标头保存到文件中,对吗?顺便说一句,你知道这个网站anti-captcha.com 吗?我用过,效果很好。
-
不,我想将图像保存到文件中,同时使加载该图像时返回的标题可用于脚本的其余部分。唯一需要保存到文件的是图像。
-
您需要将返回标头分配给变量,以便稍后在脚本中使用它,我理解正确吗?
-
是的,没错。我需要对图像发出一个请求,然后将该图像保存到服务器上的文件中,同时将标头返回到变量,以便脚本的其余部分可以使用它们。仅对图像发出一个请求很重要,因为在对图像的每次请求时,返回的标头都会更改并且特定于已加载的图像。
-
你没有使用
CURLOPT_RETURNTRANSFER有什么特殊原因吗?
标签: php image curl cookies captcha