如何使用没有文件路径的php检索重现的pdf文档?

时间:2016-08-16 19:50:28

标签: php pdf curl web-scraping

这是我曾经遇到过的最难倒的事情之一,并且可能没有编程解决方案。

我正在寻找一个市政网站来判断留置权。结果页面有两个帧,左框架和右框架。左框架html是直接的,而不是问题。右边框架会生成一个pdf文档,该文档对应于左侧框架中找到的案例#。

这是实际案例页面的sample link。请注意,我已经处理了虚拟点击以同意TOS,所以我的scrape得到了一个实际的案例页面而不是T.O.S.页。

要获取页面内容需要两个单独的擦除,我使用cURL发送TOS协议,我不会为您提供代码示例。

在第一个cURL之后,我发送第二个cURL以获取相当成功的内容:

function getHtml($url, $post = null) {
    $content = "";
    $string = "Authenticated=0&AccessLevel=z58jgxoXvjk=&AgentKey=&CacheKey=25735097.0777&LastUrl=".urlencode($url);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_COOKIE, "$string");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    if(!empty($post)) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    } 
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

我已经在结果页面中解析了两个框架网址,因此对基础页面进行cURL没有任何好处,因为这会导致找不到对象错误(因为它是一个框架页面)。

我用左边的框架调用:

$leftframeurl = "https://officialrecords.broward.org/oncoreV2/details.aspx?id=47386935";
$leftframecontent = getHtml($leftframeurl);
echo $leftframecontent . "<br><br>";

...如果我这样做,我会得到一个内容,我可以使用simple_html_dom解析html。

但是有一个与这种情况有关的pdf扫描文档,它显示在右侧框架中,如果您使用浏览器手动搜索,可以看到。

右侧框架的网址实际上是从以下网址重定向:

https://officialrecords.broward.org/oncoreV2/ImageBrowser/ShowPDF.aspx

为:

https://officialrecords.broward.org/oncoreV2/ImageBrowser/SinglePagePdf.aspx

最后一个网址是pdf的网址。你可以看到在url中没有查询字符串变量,没有“id = 47386935”,也没有任何“47386935.pdf”文件位置。根本没有什么可以参考具体的pdf。对我来说,似乎可以在后端查询pdf,超出我的范围。

但我想要的是以某种方式访问​​该案例的pdf。

我还尝试了一个单独的cURL,发送像这样的pdf标题:

function getPDF($id,$url){
    $content = "";
    $string = "Authenticated=0&amp;AccessLevel=z58jgxoXvjk=&amp;AgentKey=&amp;CacheKey=25735097.0777&amp;LastUrl=".urlencode($url);
    $request = "";
    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_COOKIE => "$string",
        CURLOPT_URL => $url,
        CURLOPT_HTTPHEADER  => array('Cache-Control: public', 'Content-type: application/pdf'),
        CURLOPT_HEADER => TRUE,
        CURLOPT_RETURNTRANSFER  =>true,
        CURLOPT_FOLLOWLOCATION => FALSE,
        CURLOPT_VERBOSE => true,
        CURLOPT_POST => FALSE
    ));
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

$content = getPDF('47386935','https://officialrecords.broward.org/oncoreV2/ImageBrowser/SinglePagePdf.aspx');

......但这也没有给我任何爱。

1 个答案:

答案 0 :(得分:1)

它来自调用ImageBrowser/default.aspx?id=47386935&dtk=FJ的Javascript代码。

<script language="javascript">
parent.doc.location.href="ImageBrowser/default.aspx?id=47386935&dtk=FJ"
</script>

这会在URL中接收文档ID,然后设置一些cookie,然后该URL打开ShowPDF.aspx,它使用cookie中的值来提供相应的PDF。

因此,提取ImageBrowser URL,使用cURL调用它,以便设置相应的cookie,然后获取ShowPDF.aspx,它应该包含您正在寻找的内容。

view-source:https://officialrecords.broward.org/oncoreV2/ImageBrowser/default.aspx?id=47386935&dtk=FJ