0

有谁知道任何用于连接远程服务器的 PHP 库,该库使用带 qop=auth-int 的 Digest 身份验证方法?或者,如果不是,现在我应该为结果构建 A2 吗?它在 RFC 2617 中说我需要使用实体主体,但这是什么?我只是发送一个 GET 请求,它根本没有任何正文。提前致谢。

4

3 回答 3

1

根据我对类似问题的回答:

我最近使用 cURL 在 PHP 中实现了客户端摘要身份验证。这是完整的代码:

<?php

error_reporting(E_ALL); 
ini_set( 'display_errors','1');

$url = "https://api.example.com/ws.asmx/do";
$username = "username";
$password = "pwd";
$post_data = array(
        'fieldname1' => 'value1',
        'fieldname2' => 'value2'
  );

$options = array(
        CURLOPT_URL            => $url,
        CURLOPT_HEADER         => true,    
        CURLOPT_VERBOSE        => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false,    // for https
        CURLOPT_USERPWD        => $username . ":" . $password,
        CURLOPT_HTTPAUTH       => CURLAUTH_DIGEST,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($post_data) 
);

$ch = curl_init();

curl_setopt_array( $ch, $options );

try {
  $raw_response  = curl_exec( $ch );

  // validate CURL status
  if(curl_errno($ch))
      throw new Exception(curl_error($ch), 500);

  // validate HTTP status code (user/password credential issues)
  $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  if ($status_code != 200)
      throw new Exception("Response with Status Code [" . $status_code . "].", 500);

} catch(Exception $ex) {
    if ($ch != null) curl_close($ch);
    throw new Exception($ex);
}

if ($ch != null) curl_close($ch);

echo "raw response: " . $raw_response; 

?>
于 2013-11-09T01:28:00.583 回答
1

对于 GET 以外的请求,我也在寻找您问题的答案。也许你可以使用类似的东西:

$entityBody = file_get_contents('php://input');

我没有测试它是否有效,但看看这个问题的答案,我觉得它应该有效。

请注意,此流只能读取一次[1],因此如果您在其他地方再次需要它,您应该重用 $entityBody 变量。

于 2013-01-23T14:05:05.023 回答
0

如果您正在执行 GET 请求,则不需要 auth-int。如果您的服务需要它,您可以假设一个空的实体主体(因此您可以对 A2 哈希的这一部分执行 md5("") )。

于 2011-06-14T14:09:47.533 回答