在Google Apps Script中调用Everypixel API处理无后缀图片URL问题
解决Everypixel人脸检测API无法处理无后缀图片URL的问题
核心问题分析
- 认证方式错误:原curl命令使用
--user实现Basic认证,但你的Google Apps Script代码错误地将认证信息放在user请求头中,正确做法是使用Authorization头携带Base64编码的客户端凭证。 - 图片类型识别失败:Everypixel API可能依赖URL后缀判断图片格式,无后缀URL会导致API无法识别图片类型,进而无法正常处理请求。
解决方案一:修正认证并指定图片类型
通过在请求Payload中添加image_type参数明确图片格式,同时修正Basic认证的请求头:
var apiUrl = "https://api.everypixel.com/v1/faces"; var clientId = "<your-client-id>"; var clientSecret = "<your-client-secret>"; var targetImageUrl = "https://media-exp1.licdn.com/dms/image/C4D03AQEnKuhl53UqCA/profile-displayphoto-shrink_800_800/0/1563935310527?e=2147483647&v=beta&t=8x-OjnqJCg6U7jt9Zm2rRscO22pG5C5QvgSh7H9lfSI"; const response = UrlFetchApp.fetch(apiUrl, { method: "POST", headers: { "Cache-Control": "no-cache", "Content-Type": "application/json", // 修正Basic认证:Base64编码客户端ID和密钥 "Authorization": "Basic " + Utilities.base64Encode(`${clientId}:${clientSecret}`) }, muteHttpExceptions: true, followRedirects: true, validateHttpsCertificates: true, contentType: "application/json", payload: JSON.stringify({ url: targetImageUrl, // 根据实际图片格式指定类型(jpg/png等) image_type: "jpg" }) }); var data = JSON.parse(response.getContentText()); Logger.log(data);
解决方案二:下载图片后以文件形式上传
如果指定image_type无效,可先将图片下载为Blob,再通过multipart/form-data形式上传,让API直接从文件内容识别图片类型:
var clientId = "<your-client-id>"; var clientSecret = "<your-client-secret>"; var apiUrl = "https://api.everypixel.com/v1/faces"; var targetImageUrl = "https://media-exp1.licdn.com/dms/image/C4D03AQEnKuhl53UqCA/profile-displayphoto-shrink_800_800/0/1563935310527?e=2147483647&v=beta&t=8x-OjnqJCg6U7jt9Zm2rRscO22pG5C5QvgSh7H9lfSI"; // 下载目标图片为Blob格式 var imageBlob = UrlFetchApp.fetch(targetImageUrl).getBlob(); // 构造multipart请求上传文件 var options = { method: "POST", headers: { "Authorization": "Basic " + Utilities.base64Encode(`${clientId}:${clientSecret}`) }, muteHttpExceptions: true, payload: { file: imageBlob } }; var response = UrlFetchApp.fetch(apiUrl, options); var data = JSON.parse(response.getContentText()); Logger.log(data);
验证步骤
- 将代码中的
<your-client-id>和<your-client-secret>替换为实际的Everypixel凭证。 - 方案一中需根据图片实际格式调整
image_type参数。 - 运行脚本后查看日志,确认API返回正常的人脸检测结果。
内容的提问来源于stack exchange,提问作者Steph
相关产品推荐
相关产品推荐

