当前位置: 首页 > 知识库问答 >
问题:

为什么Instagram API会为同一个用户返回两个不同的user_id值?

韦嘉颖
2023-03-14

简单说明:PHP实现获得正确的user_id,react.js实现获得不正确的user_id。为什么!?

我在React下用PHP和Javascript实现了Instagram基本显示API OAuth流。

PHP下的流程工作得很好--我得到一个代码,我post它使用curl来/oauth/access_token,我收到一个client_id和一个access_token,所有这些都很好,后续的图形API请求工作得很好。

然后我用JavaScript重新构建了它。在这里,当我获得一个代码,并且我使用fetch将它post发送到/oauth/access_token,使用相同的client_id和client_secret,使用相同的身份验证用户,本质上是相同的请求,只是不同的重定向URL(显然),我会收到一个令牌和一个不同的user_id,这是不起作用的(它从Graph API得到一个400错误)。

奇怪的是,坏的user_id总是比我用PHP得到的小1:好的以93结尾,坏的以92结尾。如果我做了不可描述的操作,并且只是手动增加我收到的错误的user_id,我将获得一个令牌有效的user_id!

那么,为什么Instagram给我发了一个错误的用户ID,我该怎么做呢?

共有1个答案

汪茂
2023-03-14

我终于找到了原因,就在几分钟前,在写完问题和之前浪费了5个小时来分析我能想到的一切。

user_id作为大于number.max_safe_integer的数字发送,因此json.parse无法正确解析它。Instagram应该将user_id字段编码为字符串。因此,需要手动解析此API端点。我通过这样过滤结果来“修正”我的:text=text.replace(/“user_id”:\s*(\d+)/,‘“user_id”:“$1”')。不过,在JSON中对“数字”这样的大数字进行编码是一种可怕的做法,Instagram应该修改它们的API。

 类似资料:
  • 问题内容: 我运行了跟随脚本(java),它给了我奇怪的结果。有人可以帮忙解释吗? 记录结果(彼此不同): - - 背景 - - 我想将自己的keyGenrator用于@Cacheable批注(Spring和ehCache)。 在这种情况下,我发现缓存总是丢失的。 然后,我必须更改为: 谢谢 问题答案: 这是因为for 不会被覆盖。即使条目相同,也没有理由为什么的两个实例应该具有相同的值。 试试这

  • 问题内容: 我可以跑: 而事实证明,并且有不同的MD5哈希值。的确,它们是不同的,这证实了这一点。 我还需要传递其他哪些标志,以便其输出随时间推移与相同输入保持一致? 问题答案: 相当于 文件不同的原因是因为将其输入文件名和修改时间放入了压缩文件中。当输入是管道时,它将使用空字符串作为文件名,并使用当前时间作为修改时间。 但是它也有一个选项,告诉它不要将名称和时间戳记放入文件中。因此,如果您显式编

  • 问题内容: 考虑以下两种情况: (转到Playground链接) 第二个打印9.120000000000001,实际上很好 但是,为什么第一行打印9.12,但末尾没有…01?Go是否会将两个未类型化的常数相乘,并在编译时将它们简单地替换为9.12文字? 问题答案: 根据规格: 常量表达式总是精确地求值;中间值和常量本身可能需要比该语言中任何预声明类型支持的精度大得多的精度。 以来 是一个常数表达式

  • 问题内容: 为什么会有“ inArray然后是“ arr” …的意义呢? 与“ withFunc和” aFunc“相同,它使代码更加复杂并且阅读起来也更混乱,为什么还要使用它们呢? 问题答案: inArray是外部名称,传递参数时函数的调用者应使用该名称。arr是函数实现者在实现中用来引用参数的内部名称。您不必提供外部名称,它使名称更易读。它更像是使快捷的函数名称和参数像Objective- C函

  • } 我得到了下面的结果。但是在这个结果中,高亮显示的行具有相同的列名,但是别名不同。为什么hibernate会得到相同的Cloumn? 冬眠:删除表,如果存在hibernate_sequence hibernate:删除表(如果存在)UserDetails Hibernate:如果存在,则删除表车辆Hibernate:创建表hibernate_sequence(next_val bigint)En

  • 问题内容: 我在程序中看到了与程序中此特定循环相关的不同行为,但我不确定我为什么理解它的行为方式。 的输出是 的输出是 我去网上看了以下内容 在切片上进行测距时,每次迭代都会返回两个值。第一个是索引,第二个是该索引处的元素的副本 它说一个副本,这是否意味着它返回了字符串的副本,但这实际上是指向变量的指针?在这种情况下,在循环结束时对will的任何引用都实际上引用了数组中的最后一个元素,例如?这是否