如何通过DOM传递Age Verification

Mar*_*tok 5 php cookies curl dom image

我正在尝试从Steam商店页面中提取一些图片网址,例如:http: //store.steampowered.com/app/35700/
http://store.steampowered.com/app/252490/

这是我正在使用的代码:

$url = 'http://store.steampowered.com/app/35700/';
$html = file_get_contents($url);
$dom = new domDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
  echo $image->getAttribute('src');
}
Run Code Online (Sandbox Code Playgroud)

它适用于第一个商店页面,但第二个商店页面重定向到年龄验证页面,脚本从那里返回图像.我需要一种方法让脚本超过年龄验证并访问实际的商店页面.

任何帮助,将不胜感激.

编辑:

这是在提交年龄表时传递给服务器的内容:

snr=1_agecheck_agecheck__age-gate&ageDay=1&ageMonth=January&ageYear=1979
Run Code Online (Sandbox Code Playgroud)

以及它设置的cookie:

lastagecheckage=1-January-1979; expires=Tue, 03 Mar 2015 19:53:42 GMT; path=/; domain=store.steampowered.com
birthtime=662716801; path=/; domain=store.steampowered.com
Run Code Online (Sandbox Code Playgroud)

EDIT2:

我可以使用cURL设置cookie,但DOM loadHTML不使用它们,所以我得到了和以前一样的结果.我需要一种方法让loadHTML使用我设置的特定cookie,或者另一种方法来获取将使用cURL设置的cookie的图像URL.

Mar*_*tok 6

解决了!这是工作代码:

$url = 'http://store.steampowered.com/app/35700/';

$ch = curl_init();

curl_setopt($ch, CURLOPT_COOKIE, "birthtime=28801; path=/; domain=store.steampowered.com");
curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

$dom = new domDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($result);
$dom->preserveWhiteSpace = false;

$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
  $src = $image->getAttribute('src');
  echo $src.PHP_EOL;
}

curl_close($ch);
Run Code Online (Sandbox Code Playgroud)