如何向PHP脚本发送的请求头添加参数?

如何向PHP脚本发送的请求头添加参数?,php,rest,http-headers,Php,Rest,Http Headers,我正在尝试使用一个web服务RESTAPI,我需要为其添加一个用于授权的参数(当然,使用适当的密钥)以获得XML结果。我在用PHP开发。在这种情况下,如何向请求标头添加参数 编辑:我现在处理请求的方式是$xml=simplexml\u load\u file($query\u string)是否使用curl?(推荐) 我假设您正在使用curl对RESTAPI执行这些请求,如果您没有这样做的话;使用它 使用curl时,您可以通过调用带有适当参数的curl\u setopt来添加自定义标题,如下面的

我正在尝试使用一个web服务RESTAPI,我需要为其添加一个用于授权的参数(当然,使用适当的密钥)以获得XML结果。我在用PHP开发。在这种情况下,如何向请求标头添加参数


编辑:我现在处理请求的方式是
$xml=simplexml\u load\u file($query\u string)

是否使用curl?(推荐)

我假设您正在使用
curl
对RESTAPI执行这些请求,如果您没有这样做的话;使用它

使用
curl
时,您可以通过调用带有适当参数的
curl\u setopt
来添加自定义标题,如下面的

 curl_setopt (
   $curl_handle, CURLOPT_HTTPHEADER,
   array ('Authentication-Key: foobar')
 ); // make curl send a HTTP header named 'Authentication-key'
    // with the value 'foobar'
文件:


您使用的是文件内容还是类似内容?

此方法是不推荐的,尽管它是功能性的

注意:
allow\u url\u fopen
需要为
file\u get\u contents
启用才能通过HTTP访问资源

如果要向此类请求添加自定义头,则需要自己创建一个有效的
流上下文
,如以下代码段所示:

$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
);
文档:


我没有使用上述两种解决方案,我该怎么办? [后期编辑]

我的建议是使用
curl
获取数据,然后在收到所有数据后将其传递给相关的解析器。从处理返回的数据中提取单独的数据

[/Post-OP-EDIT]



您正在使用curl吗?(推荐)

我假设您正在使用
curl
对RESTAPI执行这些请求,如果您没有这样做的话;使用它

使用
curl
时,您可以通过调用带有适当参数的
curl\u setopt
来添加自定义标题,如下面的

 curl_setopt (
   $curl_handle, CURLOPT_HTTPHEADER,
   array ('Authentication-Key: foobar')
 ); // make curl send a HTTP header named 'Authentication-key'
    // with the value 'foobar'
文件:


您使用的是文件内容还是类似内容?

此方法是不推荐的,尽管它是功能性的

注意:
allow\u url\u fopen
需要为
file\u get\u contents
启用才能通过HTTP访问资源

如果要向此类请求添加自定义头,则需要自己创建一个有效的
流上下文
,如以下代码段所示:

$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
);
文档:


我没有使用上述两种解决方案,我该怎么办? [后期编辑]

我的建议是使用
curl
获取数据,然后在收到所有数据后将其传递给相关的解析器。从处理返回的数据中提取单独的数据

[/Post-OP-EDIT]



当您使用
$xml=simplexml\u load\u文件($query\u string)时
,PHP解释器调用它在
fopen
上的包装器来打开位于
$query\u string
的文件的内容。如果
$query\u string
是一个远程文件,PHP解释器将打开一个指向该远程URL的流,并检索该文件的内容(如果HTTP响应代码
200 OK
)。它使用默认的流上下文来实现这一点

有一种方法可以通过改变流上下文来改变发送的头,但是,在大多数情况下,这是一个坏主意。您依靠PHP始终打开所有文件,无论是本地文件还是远程文件,所使用的函数仅用于获取本地文件名。它不仅是一个安全问题,而且可能是一个很难追踪的bug的来源

取而代之的是,考虑使用CURL分割远程内容的加载(检查返回的HTTP状态代码和其他安全性检查),然后将该内容解析为<代码> > SimeXMLMultEng/<代码>对象。使用cURL时,可以通过调用类似于

cURL\u setopt($ch,CURLOPT\u HTTPHEADER,array('HeaderName'=>'value');


希望这有帮助。

当您使用
$xml=simplexml\u load\u文件($query\u string)时
,PHP解释器调用它在
fopen
上的包装器来打开位于
$query\u string
的文件的内容。如果
$query\u string
是远程文件,PHP解释器将打开一个指向该远程URL的流,并检索该文件的内容(如果HTTP响应代码
200 OK
)。它使用默认的流上下文来执行此操作

有一种方法可以通过改变流上下文来改变发送的头,但是,在大多数情况下,这是一个坏主意。您依赖PHP总是使用一个只使用本地文件名的函数来打开所有文件,无论是本地文件还是远程文件。这不仅是一个安全问题,而且可能是一个很难纠正的错误源趴下

取而代之的是,考虑使用CURL分割远程内容的加载(检查返回的HTTP状态代码和其他安全性检查)然后将该内容解析为要使用的

SimpleXMLElement
对象。使用cURL时,可以通过调用类似于
cURL\u setopt($ch,CURLOPT\u HTTPHEADER,array('HeaderName'=>'value'))的内容来设置要随请求发送的任何头;


希望这有帮助。

噢!我在使用
$xml=simplexml\u load\u文件($query\u字符串);
噢!我在使用
$xml=simplexml\u load\u文件($query\u字符串);