gpt4 book ai didi

php - 如何 header stream_context_create?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:53 25 4
gpt4 key购买 nike

我有以下代码:

$options = array(
'http' => array(
'header' => "Content-type: text/html\r\n",
'method' => 'POST'
),
);

$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

这没有给出适当的结果(根本没有结果),因为等效的 curl 是:

function curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, 1);
$data = curl_exec($ch);
curl_close($ch);

$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $httpcode;

return $data;
}

curl($url);

实际给出实际结果。

因为我想避免在生产服务器中发生 curl ,所以我真的希望 file_get_contents 能正常工作。为了对此进行调试,我决定检查 curl 和 file_get_contents 的 header 。在上面的 curl 代码中,您可以注意到打印标题的 echo:

HTTP/1.0 411 Length Required Content-Type: text/html; charset=UTF-8 Content-Length: 1564 Date: Thu, 03 Dec 2015 18:00:25 GMT Server: GFE/2.0

我想对 file_get_contents 做同样的事情来检查它的标题,并希望完全看到哪里出了问题。 (如果愿意,您可以自己指出问题所在)。

最佳答案

像这样的东西应该可以工作:

<?php

$url = 'http://example.com/';
$data = ''; // empty post

$options = array(
'http' => array(
'header' => "Content-type: text/html\r\nContent-Length: " . strlen($data) . "\r\n",
'method' => 'POST'
),
);

$context = stream_context_create($options);
$fp = fopen($url, 'r', false, $context);
$meta = stream_get_meta_data($fp);

if (!$fp) {
echo "Failed!";
} else {
echo "Success";
$response = stream_get_contents($fp);
}

fclose($fp);
var_dump($meta);

要获取流元数据,您需要从 file_get_contents 切换到 fopen。这没有区别,因为在引擎盖下,PHP 将以相同的方式连接并发出响应(使用 http:// 包装器)。

如果 php.ini 设置为禁用 allow_url_fopen , file_get_contents 和 fopen 都会受到影响并且无法打开远程 URL。只要不是这种情况,URL 的 fopen 将以与 file_get_contents 相同的方式工作;使用 fopen 只允许您访问流,然后您可以调用 stream_get_meta_data上。

关于php - 如何 header stream_context_create?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com