使用AWS Lambda/EC2调用av.by API返回423错误的求助
调用av.by API返回423状态码问题排查
在使用AWS Lambda或EC2实例调用https://av.by/相关API时,持续收到423状态码错误。已为Lambda配置VPC,但问题仍未解决,期望获取200状态码的正常响应数据。
请求代码(Node.js)
const contentJson = await fetch( 'https://api.av.by/offer-types/cars/filters/main/apply', { headers: { accept: '*/*', 'accept-language': 'ru,nl;q=0.9', 'content-type': 'application/json', 'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-site', 'x-device-type': 'web.desktop', Referer: 'https://cars.av.by/', 'Referrer-Policy': 'strict-origin-when-cross-origin', }, body: '{"page":2,"properties":[{"name":"price_currency","value":2}],"sorting":4}', method: 'POST', }, );
返回的响应信息
Response { [Symbol(realm)]: null, [Symbol(state)]: { aborted: false, rangeRequested: false, timingAllowPassed: true, requestIncludesCredentials: true, type: 'default', status: 423, timingInfo: { startTime: 19720.235054999997, redirectStartTime: 0, redirectEndTime: 0, postRedirectStartTime: 19720.235054999997, finalServiceWorkerStartTime: 0, finalNetworkResponseStartTime: 0, finalNetworkRequestStartTime: 0, endTime: 0, encodedBodySize: 0, decodedBodySize: 0, finalConnectionTimingInfo: null }, cacheState: '', statusText: '', headersList: HeadersList { cookies: null, [Symbol(headers map)]: [Map], [Symbol(headers map sorted)]: null }, urlList: [ [URL] ], body: { stream: undefined } }, [Symbol(headers)]: HeadersList { cookies: null, [Symbol(headers map)]: Map(5) { 'server' => [Object], 'date' => [Object], 'content-length' => [Object], 'connection' => [Object], 'keep-alive' => [Object] }, [Symbol(headers map sorted)]: null } }
可能的解决方向
- IP风控拦截:av.by大概率对AWS云服务商的IP段做了限制,这类IP被判定为爬虫或非人工请求。
- 给EC2绑定独立弹性IP,或给Lambda配置带弹性IP的NAT网关,更换出站IP后重试。
- 降低请求频率,模拟真实用户的访问节奏,避免短时间内多次请求。
- 请求头补全:原请求缺失关键的
User-Agent头,这是网站识别正常请求的核心标识之一。- 添加标准浏览器
User-Agent,例如:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36。 - 将请求体改为JSON对象序列化的方式,避免手动拼接字符串出现格式问题:
body: JSON.stringify({page:2, properties:[{name:"price_currency", value:2}], sorting:4})。
- 添加标准浏览器
- VPC配置检查:确认VPC的安全组、网络ACL允许出站443端口流量,同时验证DNS解析是否正常(可在EC2执行
nslookup api.av.by,或在Lambda中添加域名解析日志)。 - 会话验证:部分API需要携带浏览器访问时生成的Cookie才能正常响应,可先通过浏览器打开
https://cars.av.by/,复制Cookie到请求头的Cookie字段后重试。
内容的提问来源于stack exchange,提问作者Artur Hearhizau
相关产品推荐
相关产品推荐

