php - PHP cURL 响应标头
问题描述
我第一次尝试 HTTP 请求(也使用 PostMan)。在那里,一切正常。使用 PHP cURL 导出它时,我得到以下信息:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "htt..",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic ..."
),
));
$response = curl_exec($curl);
curl_close($curl);
我期待响应标头中有一个键,因此我试图将响应标头作为变量(首选数组)。我该怎么做?到目前为止,我没有运气尝试使用以下内容:
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
感谢您提前提供任何帮助。
编辑1:
使用https://incarnate.github.io/curl-to-php/我将 Postman cURL 命令转换为 PHP cURL(而不是使用 Postman 的生成器)并得到以下内容,这似乎有效:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'htt..');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //manually added
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //manually added
curl_setopt($ch, CURLOPT_HEADER, 1); //manually added
$headers = array();
$headers[] = 'Authorization: Basic ...';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($result, 0, $header_size);
$body = substr($result, $header_size);
curl_close($ch);
echo $header;
解决方案
你真的很接近解决这个问题,但你需要将它设置CURLOPT_HEADER
为 true 来检索标题。此更改应该有效:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "htt..",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HEADER => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic ..."
),
));
$response = curl_exec($curl);
if (curl_errno($curl) !== CURLE_OK) {
throw new \RuntimeException("curl_exec error: " . curl_error($ch) . ": " . curl_error($ch));
}
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
curl_close($curl);
推荐阅读
- c# - .netTiers + Codesmith VS 实体框架 .Net C#
- java - 在一个流中过滤和设置()
- python - Python gmail imap - 如何阅读邮件并将其打印为原始标题
- c++ - 包含多个对象的手写单链表中的分段错误
- prometheus - Alertmanager 错误: caller=notifier msg="错误发送警报" err="错误响应状态 500 内部服务器错误"
- perl - 如何将数组作为列写入 CSV
- javascript - Button of 2nd form submits 1st form that doesn't have a submit button
- android - 为什么函数“if (counter >10)”不能工作?
- ruby-on-rails - How can I automatically restart a thread Ruby on Rails
- c++ - Reading And Writing Windows Registry in C++ (How to convert string to wchar(?))