0

0

LinkedIn API URL编码问题的正确解决方案

聖光之護

聖光之護

发布时间:2026-01-18 23:12:02

|

909人浏览过

|

来源于php中文网

原创

LinkedIn API URL编码问题的正确解决方案

linkedin v1 api对括号等特殊字符的url编码有特殊要求,直接使用go标准库的`http.newrequest`会导致路径被过度编码而失败;通过手动设置`url.opaque`字段可绕过自动编码,精准构造合法请求路径。

在调用 LinkedIn v1 REST API 时,字段选择器(如 ~:(id,first-name,last-name))中的圆括号 ( 和 ) 在语义上属于路径结构的一部分,不应被 URL 编码。然而,Go 的 net/http 标准库在解析完整 URL 字符串(如 "https://api.linkedin.com/v1/people/~:(id,first-name,last-name)")时,会自动对路径中非安全字符(包括 ( 和 ))进行百分号编码(即转为 %28 和 %29),导致 LinkedIn 服务端无法识别该字段语法,返回 404 及 [invalid.property.name] 错误。

根本原因在于:LinkedIn v1 API 的路径语法是自定义 DSL(类似 OData 选择器),其括号并非传统 URI 中需编码的分隔符,而是资源投影表达式的必需符号。因此,必须确保这些字符以原始形式出现在最终 HTTP 请求行的 path 部分。

✅ 正确做法是避免让 http.NewRequest 解析含特殊符号的完整 URL,而是拆解为协议+主机+端口,并通过 URL.Opaque 手动注入未编码的路径:

我秀秀淘宝客api源码
我秀秀淘宝客api源码

程序介绍:程序采用.net 2.0进行开发,全自动应用淘客api,自动采集信息,无需,手工更新,源码完全开放。(程序改进 无需填入阿里妈妈淘客API 您只要修改app_code文件下的config.cs文件中的id为你的淘客id即可)针对淘客3/300毫秒的查询限制,系统采用相应的解决方案,可以解决大部分因此限制带来的问题;程序采用全局异常,避免偶尔没考虑到的异常带来的问题;程序源码全部开放,请使

下载
r, err := http.NewRequest("GET", "https://api.linkedin.com", nil)
if err != nil {
    log.Fatal("Failed to create request:", err)
}
// 关键:绕过自动编码,直接设定原始路径(含未编码的括号)
r.URL.Opaque = "/v1/people/~:(id,first-name,last-name)"
r.Header.Set("Authorization", "Bearer "+respBody.AccessToken)
r.Header.Set("x-li-format", "json") // 推荐显式声明 JSON 响应格式

resp, err := http.DefaultClient.Do(r)
if err != nil {
    log.Fatal("Request failed:", err)
}
defer resp.Body.Close()

⚠️ 注意事项:

  • URL.Opaque 仅在 URL.Scheme 和 URL.Host 已明确时生效;若设为 Opaque,URL.Path、URL.RawPath 等字段将被忽略;
  • 此方案兼容所有 Go 版本(1.0+),无需修改标准库或引入第三方 HTTP 客户端;
  • LinkedIn v1 API 已于 2023 年全面停用,生产环境请尽快迁移到 LinkedIn Marketing Developer PlatformAds API v2,后者使用标准 REST + OAuth 2.0,路径参数遵循 RFC 3986,不再存在此类编码歧义;
  • 若必须维持 v1 调用,请确保 Access Token 具备 r_basicprofile 权限,且应用处于“开发模式”或已通过 LinkedIn 审核。

总结:这不是 Go 编码逻辑的缺陷,而是 API 设计与标准 URI 规范的冲突。URL.Opaque 是 Go 提供的标准、安全、无副作用的绕过机制,是处理此类“伪标准 API”的最佳实践。

相关专题

更多
登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6096

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

806

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1062

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1249

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

258

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

208

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

619

2023.11.24

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号