jjzjj

go - 尝试检索个人资料信息时 linkedin 登录返回 404

coder 2024-07-05 原文

我在 linkedin 上有一个使用登录 api 的应用程序。这是一个使用 go 和 goth 身份验证库的网络应用程序。直到几天前,我的应用程序还可以很好地验证用户身份。现在它返回此错误消息:

linkedin 响应 404 试图获取用户信息

该应用程序已连续运行数周而未更新。所以没有任何代码更改。

我应该提一下,它确实将我带到登录页面,但在输入我的用户名和密码后,它会重定向并输出上述错误

goth oauth api 代码位于此处:https://github.com/markbates/goth/blob/master/providers/linkedin/linkedin.go

它本质上是用访问 token 调用这个 url http://api.linkedin.com/v1/people/~:(id,first-name,last-name,headline,location:(name),picture-url,email-address)

有谁知道 api 端点是否已更改或任何其他原因导致身份验证停止工作?

我一直在查看博客,但我没有看到关于 api 的更新,而且似乎没有办法获得 linkedin 开发人员支持,因为它只指向 stackoverflow。

最佳答案

所以在深入研究这个问题之后。看来 linkedin 现在正在从他们的 api 返回 http 2.0 响应。

我通过编写一个小的 go 程序发现了这一点,该程序在我的本地机器和服务器代码所在的 aws 实例上运行。

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/http/httputil"
    "net/url"
)

const (
    bearerToken string = "AQVJampuUSuvWs5beuCvHiJYC--"
)

func main() {

    userEndpoint := "//api.linkedin.com/v1/people/~:(id,first-  name,last-name,headline,location:(name),picture-url,email-address)?format=json"

client := &http.Client{}

req, err := http.NewRequest("GET", "", nil)

req.URL = &url.URL{
    Scheme: "https",
    Host:   "api.linkedin.com",
    Opaque: userEndpoint,
}

req.Header.Set("Authorization", "Bearer "+bearerToken)
resp, err := client.Do(req)

request, _ := httputil.DumpRequest(req, true)

fmt.Println("request:", string(request))

data, _ := ioutil.ReadAll(resp.Body)

response, _ := httputil.DumpResponse(resp, false)

resp.Body.Close()

fmt.Println("response:", string(response))

fmt.Println(err, req.URL.String(), string(data))
}

当在我的本地机器上运行它时,api 返回了一个带有配置文件数据的响应。当我在 aws 实例上运行它时,它返回了带有 http 2.0 header 的 404

这是在 aws 上运行该程序的输出的摘录

请求:获取 https://api.linkedin.com/v1/people/~?format=json HTTP/1.1 主办方:api.linkedin.com 授权:不记名AQVJampuUSuvWs5beu--

响应:HTTP/2.0 404 未找到 内容长度:5530 缓存控制:无存储 内容语言:en 内容类型:文本/html 日期:2017 年 2 月 18 日星期六 03:45:21 GMT X-Li-Pop:prod-lva1-h2

<!-- EF of static content included-->
<html>
  <head>
  <title>404: Not Found</title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <style type="text/css">
 /* GLOBAL */

现在我不知道这是一个错误还是预期的行为,但看起来 linkedin 在 go 启动时返回 http 2.0 响应导致 404。

我能够修复它的方法是关闭 go 本身的 http 2.0 客户端支持。通过设置如下环境变量

GODEBUG=http2client=0

此时 linkedin api 返回个人资料信息。

我很想知道这是否是 linkedin 或 go 的错误。希望 linkedin 的人可以插话。

关于go - 尝试检索个人资料信息时 linkedin 登录返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42304309/

有关go - 尝试检索个人资料信息时 linkedin 登录返回 404的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  5. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  6. ruby-on-rails - 为什么在安装 Ruby 1.9.3 时出现 404 错误? - 2

    我最近对我的计算机(OS-MacOSX10.6.8)进行了删除,并且我正在重新安装我所有的开发工具。我再次安装了RVM;但是,它不会让我安装Ruby1.9.3。到目前为止我已经尝试过:rvminstall1.9.3rvm安装1.9.3-p194rvm安装1.9.3-p448rvminstall1.9.3--with-gcc=clang所有返回相同的命令行错误:Searchingforbinaryrubies,thismighttakesometime.Nobinaryrubiesavailablefor:osx/10.6/x86_64/ruby-1.9.3-p448.Continuin

  7. ruby-on-rails - 使用 HTTP.get_response 检索 Facebook 访问 token 时出现 Rails EOF 错误 - 2

    我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token

  8. ruby - what is - gets is a directory - 错误信息 - 2

    我遇到了这个奇怪的错误.../Users/gideon/Documents/ca_ruby/rubytactoe/lib/player.rb:13:in`gets':Isadirectory-spec(Errno::EISDIR)player_spec.rb:require_relative'../spec_helper'#theuniverseisvastandinfinite...itcontainsagame....butnoplayersdescribe"tictactoegame"docontext"theplayerclass"doit"musthaveahumanplay

  9. ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions - 2

    我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不

  10. arrays - Ruby:尝试在哈希数组上获取 Enumerator 时,nil:NilClass 的未定义方法 `[]' - 2

    我正在尝试循环哈希数组。当我到达获取枚举器开始循环的位置时,出现以下错误:undefinedmethod`[]'fornil:NilClass我的代码如下所示:defextraireAttributs(attributsParam)classeTrouvee=falsescanTrouve=falseownerOSTrouve=falseownerAppTrouve=falseresultat=Hash.new(0)attributs=Array(attributsParam)attributs.eachdo|attribut|#CRASHESHERE!!!typeAttribut=a

随机推荐