【问题标题】:Why can’t I send a request to update the token through php?为什么我不能通过 php 发送更新令牌的请求?
【发布时间】:2020-02-23 17:18:14
【问题描述】:
$ret = file_get_contents('https://oauth2.googleapis.com/token', false, stream_context_create([
    'http' => [
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'protocol_version' => 1.1,
        'content' => http_build_query([
            'client_id' => $client_id,
            'client_secret' => $client_secret,
            'refresh_token' => $refresh_token,
            'grant_type' => $refresh_token
        ])
    ]
]));

运行脚本后,我看到 400 Bad Request 错误。我做错了什么?

【问题讨论】:

  • \r\n 在标头值的末尾肯定看起来不合适。如果您以字符串形式传递 多个 标头,那么每个标头之间应该有一个 CR LF,但只有一个,我很确定这是错误的。
  • 是的,那里仍然不需要他

标签: php oauth-2.0 google-api google-oauth


【解决方案1】:

发件人:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400

超文本传输​​协议 (HTTP) 400 错误请求响应状态 code 表示服务器不能或不会处理请求 由于某些被认为是客户错误的事情(例如, 格式错误的请求语法、无效的请求消息帧,或 欺骗性请求路由)。

这意味着您在请求中发送的参数很可能有问题。可能不是这样,但请尝试删除标头参数中的 \r\n,它们对我来说似乎很奇怪。

$ret = file_get_contents('https://oauth2.googleapis.com/token', false, stream_context_create([
    'http' => [
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'protocol_version' => 1.1,
        'content' => http_build_query([
            'client_id' => $client_id,
            'client_secret' => $client_secret,
            'refresh_token' => $refresh_token,
            'grant_type' => $refresh_token
        ])
    ]
]));

【讨论】:

  • 原来如此,但出现了以下问题。执行后,我看到一个白屏并且 var_dump 没有返回任何内容
  • @jajaja var_dump 永远不会返回“无”。如果你的意思是你从一个应该至少显示一些的脚本中根本没有得到任何输出,那么此时这可能是 stackoverflow.com/questions/1475297/phps-white-screen-of-death 的副本
  • 如果file_get_contents 只返回false,那么这通常是由于请求获得了带有不成功状态码的响应,在这种情况下 file_get_contents 将丢弃任何响应正文,除非您明确指示它以其他方式表现(参数ignore_errors在HTTP上下文选项中设置为true。)
  • 我在测试时不小心忘记删除 exit() 行。现在我检查了一下,它给了我一个错误:HTTP/1.1 400 Bad Request
  • 也许他发送的标题不是这样的? developers.google.com/youtube/v3/guides/auth/… 检查它发送到服务器的内容的最佳方法是什么?
【解决方案2】:

解决方法很简单:

'content' => http_build_query([
      client_id' => $client_id,
     'client_secret' => $client_secret,
     'refresh_token' => $refresh_token,
     'grant_type' => 'refresh_token'
 ])

【讨论】:

    猜你喜欢
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2015-02-21
    • 2018-04-04
    • 2016-09-06
    • 2020-04-14
    相关资源
    最近更新 更多