如何向PHP脚本发送的请求头添加参数?
我正在尝试使用一个web服务RESTAPI,我需要为其添加一个用于授权的参数(当然,使用适当的密钥)以获得XML结果。我在用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来添加自定义标题,如下面的
编辑:我现在处理请求的方式是
$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字符串);