当前位置: 首页 > 面试题库 >

如何在PHP的cURL POST HTTP请求中包括Authorization标头?

弘和同
2023-03-14
问题内容

我正在尝试通过Gmail OAuth 2.0访问用户的邮件,并且正在通过Google的OAuth 2.0 Playground解决此问题

在这里,他们指定了我需要将其作为HTTP REQUEST发送:

POST /mail/feed/atom/ HTTP/1.1
Host: mail.google.com
Content-length: 0
Content-type: application/json
Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString

我尝试编写代码来发送此请求,如下所示:

$crl = curl_init();
$header[] = 'Content-length: 0 
Content-type: application/json';

curl_setopt($crl, CURLOPT_HTTPHEADER, $header);
curl_setopt($crl, CURLOPT_POST,       true);
curl_setopt($crl, CURLOPT_POSTFIELDS, urlencode($accesstoken));

$rest = curl_exec($crl);

print_r($rest);

无法运作,请提供协助。:)

更新: 我接受了 杰森·麦克里Jason McCreary )的建议,现在我的代码如下所示:

$crl = curl_init();

$headr = array();
$headr[] = 'Content-length: 0';
$headr[] = 'Content-type: application/json';
$headr[] = 'Authorization: OAuth '.$accesstoken;

curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);
curl_setopt($crl, CURLOPT_POST,true);
$rest = curl_exec($crl);

curl_close($crl);

print_r($rest);

但是我没有得到任何输出。我认为cURL在某处默默失败。请帮忙。:)

更新2: NomikOS 的把戏为我做到了。:) :) :) 谢谢!!


问题答案:

@ jason-mccreary是完全正确的。此外,我建议您使用此代码来获取更多故障信息:

$rest = curl_exec($crl);

if ($rest === false)
{
    // throw new Exception('Curl error: ' . curl_error($crl));
    print_r('Curl error: ' . curl_error($crl));
}

curl_close($crl);
print_r($rest);

编辑1

要进行调试,您可以将其设置CURLOPT_HEADER为true以使用firebug ::
net
或类似工具检查HTTP响应。

curl_setopt($crl, CURLOPT_HEADER, true);

编辑2

关于Curl error: SSL certificate problem, verify that the CA cert is OK尝试添加这些标头(仅用于调试,在生产环境中,应将这些选项保留在中true):

curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false);


 类似资料:
  • 问题内容: 我应该如何阅读PHP中的任何标头? 例如自定义标头:。 问题答案: 如果 :您只需要一个标头,而不是 所有 标头,最快的方法是: ELSE IF :您将PHP作为Apache模块运行,或者从PHP 5.4开始,使用FastCGI(简单方法)运行: apache_request_headers() ELSE: 在任何其他情况下,您都可以使用(用户区实现):

  • 问题内容: 我有一个请求URI和一个令牌。如果我使用: 等等,我得到200并查看相应的JSON数据。因此,我安装了请求,并且当我尝试访问该资源时,我得到了403,这可能是因为我不知道传递该令牌的正确语法。谁能帮我解决这个问题?这就是我所拥有的: 我已经尝试过: 但是这些都不起作用。 问题答案: 在python中: 相当于 并要求翻译 当您希望请求使用基本身份验证并设计授权标头时,如下所示: 这是b

  • 我正在构建一个Java的grpc服务器,我很难得到请求头。proto文件是使用Pro buf-maven-plugin编译的,基于生成的存根,我无法访问上下文或请求元数据。 我还尝试在消息请求中定义一个键/值列表,希望grpc能够处理头映射,但目前为止没有成功。 知道我怎么能拿到标题吗? 谢谢 我的原型文件内容: 服务器端实现如下所示: 版本请求。getHeadersCount()始终返回0,尽管

  • 我想创建一个API,为了验证API使用者,我将提供一个API密钥、应用id和应用机密。问题是,我想知道http请求来自哪里,这样我就可以知道发出que请求的主机是否是注册主机。例如:www.someone。com的应用程序id为0001,应用程序机密为1200,api密钥为458。如果此凭据用于发出请求,我想知道请求者是否真的是www.someone。通用域名格式

  • 问题内容: 我需要获取所有Django请求标头。根据我的阅读,Django只是将所有内容与大量其他数据一起转储到变量中。获取客户端发送到我的Django应用程序的所有标头的最佳方法是什么? 我将使用它们来构建httplib请求。 问题答案: 根据文档,这 是“包含所有可用HTTP标头的标准Python词典”。如果要获取所有标头,则可以简单地遍历字典。 代码的哪一部分执行此操作取决于你的确切要求。有

  • 问题内容: PHP中有没有办法进行异步HTTP调用?我不在乎响应,我只想做类似的事情,但不等待请求完成再执行其余代码。这对于在我的应用程序中触发某种“事件”或触发较长的进程非常有用。 有任何想法吗? 问题答案: 我以前接受的答案没有用。它仍然在等待回应。但这确实有效,取自我如何在PHP中发出异步GET请求?