如何用GET获取网站HTML代码?PHP及Postman请求异常排查
问题解答
1. 不使用Selenium类工具,通过GET请求获取网站HTML代码
直接借助HTTP客户端工具或语言自带的HTTP请求库即可实现,以下是几种常见语言的示例:
- PHP:使用
cURL(推荐,兼容性更强)或file_get_contents$ch = curl_init('https://example.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 模拟浏览器的User-Agent,避免被识别为非浏览器请求 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); $html = curl_exec($ch); curl_close($ch); echo $html; - Python:使用
requests库import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } response = requests.get('https://example.com', headers=headers) print(response.text) - Node.js:使用
axios模块const axios = require('axios'); axios.get('https://example.com', { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } }).then(res => console.log(res.data));
核心是模拟浏览器的请求头(尤其是User-Agent),避免被网站的反爬机制拦截。
2. PHP请求目标网站响应异常的相关问题
为什么PHP请求与浏览器响应不同?
主要有两个核心原因:
- 反爬规则校验:网站会检查请求的
User-Agent、Accept、Referer、Cookie等信息,PHP默认的请求头与浏览器差异极大,被识别为爬虫后返回了特制内容。 - JS动态渲染依赖:网站的部分内容是通过JavaScript在客户端动态生成的,PHP直接发送GET请求只能拿到初始的静态HTML,而浏览器会自动执行JS渲染出最终内容,两者自然不同。
能否绕过JS内容保护?
可以尝试以下几种方案:
- 完全模拟浏览器请求头+Cookie:在浏览器中打开目标页面,复制完整的请求头(包括
User-Agent、Cookie、Accept系列字段),在PHP的cURL请求中完全复用这些信息,部分网站仅靠这一步就能拿到渲染后的内容。 - 直接请求数据接口:打开浏览器开发者工具的Network面板,找到加载动态内容的XHR/Fetch请求,直接调用这些数据接口获取原始数据,再自行处理成所需格式,这种方式比解析HTML更高效。
- 集成服务端JS执行环境:比如在PHP中配置
V8Js扩展,或者调用独立的Node.js服务来执行页面JS,渲染出完整HTML,这种方式无需Selenium,但需要额外的环境配置。
为什么Postman第一次请求正确,后续失败?
问题出在会话有效性和请求完整性上:
- Cookie过期或失效:从Chrome复制的cURL请求包含了浏览器当前有效的会话Cookie,这类Cookie通常有有效期,或者网站会对会话做单次/限时限制,第二次执行时Cookie已失效,导致返回内容变化。
- 请求头丢失:Postman导入cURL后,可能未完整保存所有请求头,或者后续操作中误删了
Cookie、Referer等关键字段,导致请求不符合网站的校验规则。
检查并确保Postman每次请求都带上有效的Cookie和完整的浏览器请求头,即可解决该问题。
内容的提问来源于stack exchange,提问作者Makinaru
相关产品推荐
相关产品推荐

