You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cURL请求未识别zip4字段值及DOM解析报错问题排查

解决cURL获取美国国会选区信息的两个问题

一、请求结果与网页不一致的问题

服务器未正确处理zip4参数,导致返回该邮编下全部议员信息,核心原因是cURL请求缺少浏览器提交时的关键请求头,无法模拟正常用户行为。

解决步骤

在cURL配置中添加必要请求头,确保服务器正确解析参数:

$curl = curl_init();
$fields = array(
    'zip' => $userzip,
    'zip4' => $userzip4,
    'thru_zip4' => $user_thru,
);

$fields_string = http_build_query($fields);
// 模拟浏览器请求头
$headers = array(
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Referer: https://ziplook.house.gov/zip/ziplook.html',
    'Content-Type: application/x-www-form-urlencoded'
);

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // 新增请求头设置
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE); // 跟随可能的重定向
$data = curl_exec($curl);
curl_close($curl);

二、"Trying to get property 'nodeValue' of non-object"报错问题

遍历表格行时,表头行、空行等没有足够的<td>元素,$cols->item(0)返回null,直接访问nodeValue触发错误。

解决步骤

在访问nodeValue前先验证元素是否存在,同时优化变量重置逻辑:

foreach ($rows as $row) {
    $cols = $row->getElementsByTagName('td');
    $links = $row->getElementsByTagName('a');
    $link = ''; // 每次循环重置链接,避免残留上一行的值
    foreach ($links as $linkNode){
        $link = $linkNode->getAttribute('href');
    }

    // 先判断元素有效性,再处理内容
    if ($cols->length > 0 && $cols->item(0) !== null && trim($cols->item(0)->nodeValue) !== '') {
        // 用htmlspecialchars转义输出,避免HTML注入
        echo 'ZIP CODE: '.htmlspecialchars($cols->item(0)->nodeValue).'<br />'; 
        echo 'MEMBER: '.htmlspecialchars($cols->item(1)->nodeValue).'<br />'; 
        echo 'MEMBER-LINK: '.htmlspecialchars($link).'<br />'; 
        echo 'STATE/DISTRICT: '.htmlspecialchars($cols->item(2)->nodeValue).'<br />'; 
        echo 'ROOM: '.htmlspecialchars($cols->item(3)->nodeValue).'<br />'; 
        echo 'PHONE: '.htmlspecialchars($cols->item(4)->nodeValue).'<br />'; 
        echo '<hr />'; 
    }
}

额外优化建议

  • 开启cURL调试模式排查请求问题:curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
  • 对DOM加载可能的警告进行抑制:libxml_use_internal_errors(true);,加载后再恢复:libxml_clear_errors();

内容的提问来源于stack exchange,提问作者user18374810

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:57:39