我正在尝试实现一种 PHP 方法来验证对美联社提要的请求。从他们的文档中:
为了验证所有提要和内容请求,AP WebFeeds 系统使用 HTTP 基本身份验证,这是目前联合提要的标准。大多数提要阅读器和阅读器组件允许提前配置用户凭据,并将它们传递到标头而不是 URL。
重要提示:直接在 URL 中传递凭据目前被广泛阻止。有关详细信息,请参阅 Microsoft 的安全公告,网址为http://www.microsoft.com/technet/security/bulletin/MS04-004.mspx。
您可以配置读取器或组件以创建具有以下格式的名称/值的身份验证标头:
("Authorization", "Basic " + {Encoded_username_and_password})
其中
{Encoded_username_and_password}
替换为字符串“用户名:密码”中字节的 Base64 编码。如果您正在编写自己的客户端代码来下载提要,请使用内置于您的编程语言库中的 HTTP 基本身份验证。HTTP 基本身份验证在大多数平台上都可用;例如,Perl、PHP、C 或 Java。
我的尝试是:
/**
* Begin Transaction
*/
$url = "http://syndication.ap.org/AP.Distro.Feed/GetFeed.aspx?idList=" . implode(',', $idList) . "&idListType=products&maxItems=25";
$auth = "Authorization=Basic " . base64_encode($user . ":" . $pass);
$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL, $url); // set url to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, $auth); // add POST fields
$result = curl_exec($ch); // run the whole process
curl_close($ch);
/**
* End Transaction
*/
var_dump($result);
这给了我:
string(405) "
Authentication
FeedServer
Authentication Failed on GetFeed
Authentication denied no auth credentials detected
"
在 PHP 中验证此请求的正确方法是什么?