在 PHP 中使用 CURL 的 POST 给出无效请求错误

2023-11-29

我正在使用下面的使用curl的谷歌帐户发布方法,但它给了我invalid_request错误。

POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded

code=4/ux5gNj-_mIu4DOD_gNZdjX9EtOFf&
client_id=1084945748469-eg34imk572gdhu83gj5p0an9fut6urp5.apps.googleusercontent.com&
client_secret=CENSORED&
redirect_uri=http://localhost/oauth2callback&
grant_type=authorization_code

这是我的带有curl的PHP代码

$text ='test';

$URL = "https://accounts.google.com/o/oauth2/token";

$header = array(
"POST /o/oauth2/token HTTP/1.1",
"Host: accounts.google.com",
"Content-type: application/atom+xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache", 
"code=[my_code]&client_id=[my_client_id]&client_secret=[my_client_secret]& redirect_uri=http://localhost/curl_resp.php&grant_type=authorization_code",
"Content-length: ".strlen($text),
);


 $xml_do = curl_init();
 curl_setopt($xml_do, CURLOPT_URL, $URL);
 curl_setopt($xml_do, CURLOPT_CONNECTTIMEOUT, 10);
 curl_setopt($xml_do, CURLOPT_TIMEOUT, 10);
 curl_setopt($xml_do, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($xml_do, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($xml_do, CURLOPT_SSL_VERIFYHOST, false);
 curl_setopt($xml_do, CURLOPT_POST, false);
 curl_setopt($xml_do, CURLOPT_POSTFIELDS, $text);
 curl_setopt($xml_do, CURLOPT_HTTPHEADER, $header);

我遇到无效请求错误


我对使用 Google 的 oAuth API 一无所知,但从我迄今为止查看的示例来看,您似乎应该传递这些值(即code, client_id等)在 post 字段中,而不是直接在 HTTP 标头中。

下面的例子仍然不能完全工作,但不是得到一个invalid_request错误,它给你invalid_grant。我认为除了我提到的之外,还有其他问题(也许你需要来自谷歌或其他东西的新凭证),但这可能会让你更近一步,至少:

$post = array(
    "grant_type" => "authorization_code", 
    "code" => "your_code", 
    "client_id" => "your_client_id", 
    "client_secret" => "your_client_secret", 
    "redirect_uri" => "http://localhost/curl_resp.php"
);

$postText = http_build_query($post);

$url = "https://accounts.google.com/o/oauth2/token";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postText); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$result = curl_exec($ch);
var_dump($result);    // gets an error, "invalid_grant"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中使用 CURL 的 POST 给出无效请求错误 的相关文章

随机推荐

  • C4 保存图像的一部分

    嘿 我浏览了保存图像的示例 然后我只想保存屏幕的一部分 我设法保存从图像左上角开始的部分 但实际上我想保存屏幕的中心 仅保存图像的一部分的神奇之处在于设置具有特定大小的图形上下文 如下所示 UIGraphicsBeginImageConte
  • 从绑定项获取 ItemsControl 内的 DataGrid

    我有一个 ItemsControl 在其模板中使用 DataGrid 如下所示
  • Java正确处理异常

    对JAVA或异常处理不太熟悉 寻求一些关于什么是可以接受的 什么是不受欢迎的建议 该场景 我正在构建一个生命游戏程序 我设置了条件来检查单元格是否超出范围 并且不尝试访问该 单元格 我的问题是 使用 try catch 块代替 8 个条件是
  • 相对于页面上滚动位置的视觉计数器

    对于一个项目 我必须使用 html 和 javascript 制作一个可视计数器 相对于窗口的滚动位置从 150 倒数到 0 我不完全确定我应该如何去做这件事 但这是我到目前为止所拥有的 HTML span class meterCount
  • Nginx 位置指令中子目录的正则表达式或通配符

    我的开发人员将在本地计算机上编辑多个 Wordpress 站点 我想为他们设置一次 Nginx 而无需他们将来编辑配置文件 通常 当 Nginx 配置为托管 Wordpress 时 会包含如下位置块 location try files u
  • file_put_contents() 在尝试导出图像时发出错误

    我通过将多个图像复制到新图像中来创建图像 在程序的最后一步中 我尝试将此文件导出到文件夹中 代码如下
  • 获取互斥体后调用await操作[重复]

    这个问题在这里已经有答案了 如何使用写入文件await FileIO WriteTextAsync 在 Windows Phone 8 1 中 获取后mutex这样就不会有两个线程访问同一个文件并确保互斥 我正在执行以下操作 mutex W
  • jQuery Mobile Cordova (Phonegap) 在每个页面底部留下空白

    对于我的每个 jQm 页面 每个页面的底部似乎都有一些空白 并且它无缘无故地添加了滚动行为 我已附上屏幕截图 这种不必要的滚动行为给我带来了很多麻烦 我检查了firebug中的页面 似乎jQm正在添加 min height 213px 到页
  • 不带正则表达式的 String.replaceAll

    我想替换字符串中子字符串的所有实例 但是String replaceAll 只接受一个模式 我从上一场比赛中获得的字符串 是否可以将转义添加到我拥有的模式中 或者是否有一个版本replaceAll 在另一个接受文字字符串而不是模式的类中 只
  • Matlab uint8 稀疏

    在 Matlab 中创建稀疏矩阵时 您似乎可以创建一个填充逻辑数或双值数的稀疏矩阵 在阅读周围内容时 我了解到 Matlab 不支持其他类型的稀疏矩阵 即uint8或其他整数 在我的应用程序中我知道max values 16 而记忆是至关重
  • 如何让文字接触到div的底部

    我有一个包含较大文本元素的 HTML 页面 我希望文本与包含的 div 的底部对齐 以便它接触到 div 的底部 我尝试跟随 但文本和底部之间仍然有一些空格 有什么方法可以删除这个空格并使文本接触底部吗 Here是我尝试过的活生生的例子
  • 显示模式时出现“aria-hidden elements do not contains focusable elements”问题

    我在用着反应模态在我的应用程序中 当它打开时运行斧头辅助工具给出以下错误 aria 隐藏元素不包含可聚焦元素 这是因为 React 模态添加了一个aria hidden true 到应用程序的根元素 我的所有应用程序组件都在 div 下呈现
  • 如何使用 FFMPEG 分割视频,以便每个块都以关键帧开始?

    我们需要将大型实时 WMV 视频源分割成大小相同的小块 我们制作了一个脚本 可以很好地执行此操作 但有一点除外 视频块不以关键帧开始 因此在播放大多数视频块时 它们不会显示任何图像 直到原始视频中的关键帧最终出现为止 到达 有没有办法告诉
  • SQL Server 中的 guid 实际上是如何存储和排序/比较的?

    假设我有这个指南 2A87E3E2 2B6A 4149 9F5A 1B76092843D9 它实际上是否将其存储为数据库中的字母数字 我不这么认为 因为它必须适合 16 个字节 如果没有 那么它是如何存储的呢 我的猜测是十六进制数字 但我不
  • 如何修复ggplot中的纵横比?

    我正在尝试调整绘图的大小以适合我的文档 但我很难将绘制的图表变成正方形 Example pdf file out pdf width 5 height 5 p lt ggplot mydata aes x col1 y col2 print
  • Android TextView 停止换行

    我花了很多时间寻找解决方案 但没有找到任何与我所经历的类似的东西 当我在 G2 上运行我的应用程序时 我的文本视图都不会换行文本 无论视图有多大 如果我在模拟器上运行它 它们会适当地换行 当我的其他应用程序部署到我的 G2 时 似乎没有出现
  • AngularJS 表中的键盘导航

    我正在尝试将 Windows Delphi VCL 中制作的特殊表格 网格表单移植到 Angular 应用程序 可以在此处测试 Angular 应用程序的简化版本 jsFiddle 演示 用户可以添加任意数量的行 如 jsFiddle 中所
  • 使用递归辅助函数检查素数

    我正在尝试使用递归检查一个数字是否为素数 我被要求使用递归辅助函数 但我不确定应该如何实现它 我想我知道这个算法 但我从未尝试过在 Racket 中使用递归辅助函数 这是我目前的想法 看看 n 是否能被整除i 2 Set i i 1 If
  • 2D/3D CUDA 块如何划分为扭曲?

    如果我使用一个网格来启动我的内核 该网格的块具有尺寸 dim3 block dims 16 16 网格块现在如何分割成扭曲 这样一个块的前两行是否形成一个扭曲 或者前两列 或者这是任意排序的 假设 GPU 计算能力为 2 0 线程在块内按顺
  • 在 PHP 中使用 CURL 的 POST 给出无效请求错误

    我正在使用下面的使用curl的谷歌帐户发布方法 但它给了我invalid request错误 POST o oauth2 token HTTP 1 1 Host accounts google com Content Type applic