我正在尝试使用Web服务REST API,我需要为其添加一个参数以进行授权(当然使用适当的密钥)来获取XML结果。我正在用PHP开发。在这种情况下,如何向请求标头添加参数?
修改:我现在正在执行请求的方式是$xml = simplexml_load_file($query_string);
答案 0 :(得分:4)
您使用的是卷曲吗?(推荐)
我假设您正在使用curl
对REST API执行这些请求,如果您不这样做的话;用它。
使用curl
时,您可以使用适当的参数调用curl_setopt
来添加自定义标头,如下所示。
curl_setopt (
$curl_handle, CURLOPT_HTTPHEADER,
array ('Authentication-Key: foobar')
); // make curl send a HTTP header named 'Authentication-key'
// with the value 'foobar'
文档:
您使用的是file_get_contents还是类似的?
此方法不推荐,但功能正常。
注意: allow_url_fopen
需要启用file_get_contents
才能通过HTTP访问资源。
如果您要为此类请求添加自定义标头,则需要创建一个有效的stream context
,如下面的代码段所示:
$context_options = array(
'http' =>array (
'method' => 'GET',
'header' => 'Authentication-Key'
)
);
$context = stream_context_create ($context_options);
$response = file_get_contents (
'http://www.stackoverflow.com', false, $context_options
);
<强>文档强>
[发布OP编辑]
我的建议是使用curl
获取数据,然后在收到所有数据时将其传递给相关解析器。从处理返回数据中获取单独的数据。
[/ OP OPIT]
答案 1 :(得分:0)
当您使用$xml = simplexml_load_file($query_string);
时,PHP解释器通过fopen
调用它的包装器来打开位于$query_string
的文件的内容。如果$query_string
是远程文件,则PHP解释器打开到该远程URL的流并检索该文件的内容(如果HTTP响应代码200 OK
)。它使用默认流上下文来执行此操作。
有一种方法可以通过更改流上下文来更改发送的标头,但是,在大多数情况下,这是一个坏主意。您依靠PHP始终使用仅用于获取本地文件名的函数来打开本地或远程的所有文件。它不仅是一个安全问题,而且还可能是一个很难追踪的bug的来源。
相反,请考虑使用cURL(检查返回的HTTP状态代码和其他健全性检查)分割远程内容的加载,然后将该内容解析为要使用的SimpleXMLElement
对象。当您使用cURL时,您可以通过调用类似于curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName' => 'value');
希望这有帮助。