【问题标题】:PHP Curl - headers not persisting across redirectPHP Curl - 标头不会在重定向中持续存在
【发布时间】:2015-10-01 10:35:53
【问题描述】:

我正在编写一个从命令行运行并访问使用 Oauth2 的服务的 Web 服务客户端。

我似乎正确地获取了 Oauth 令牌,并且对 web 服务的第一个请求识别了该令牌。但是响应是 303 重定向(我设置了 CURLOPT_FOLLOWLOCATION => true)但是后续页面说我没有提供身份验证令牌。

目前我通过为 curl 句柄设置标题来传递 oauth 令牌:

"Authorization: OAuth2 $oauth"

我怀疑标头未包含在后续请求中。

我尝试设置CURLOPT_UNRESTRICTED_AUTH => true,但无济于事(但根据手册,它会在重定向中保留用户名和密码 - 而不是身份验证标头)。

网络服务允许在身份验证标头或 URL 中发送 oauth 令牌(但不能作为 cookie)。在 URL 中设置令牌会返回相同的重定向(即在 URL 中没有令牌),因此我不能将此方法与 CURLOPT_FOLLOWLOCATION 一起使用。

(该服务不允许在 cookie 中发送 oauth 令牌,PHP 版本为 5.6)

【问题讨论】:

  • 您正在向 SSL 主机请求?
  • 是的(这使得很难看到代码实际在做什么)
  • 你添加了吗:curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, FALSE);卷曲选项?
  • 这是基于我的客户无法验证主机证书的想法(它不能并且我已经有了这些选项)。虽然我很欣赏你在这里的意图,但你需要一些时间来猜测我目前用来获取誓言令牌的 200 行左右的代码 - 这太多了,无法在此处发布。我创建了一个测试平台,并在代码中的其他地方发现了一个错误,该错误正在重置标头 - 由于过度热心的缓存代理没有正确处理“Vary”标头,这最初并不明显。
  • 嗨,添加 curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);并打印 curl_exec 的输出以查看您的 cURL 请求的结果?

标签: php redirect curl oauth


【解决方案1】:

发现我连接的 Websense 代理上发生了许多其他不好的事情(缓存已知过期的内容,缓存 POST 响应!)我尝试完全绕过它,所有问题都消失了。

【讨论】:

    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 2022-07-09
    • 2015-01-28
    • 2011-02-27
    • 2016-04-14
    • 2011-02-26
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多