我有一个通过套接字运行的后台脚本,如下所示
if (strstr($_SERVER['PHP_SELF'], "/")) {
$location = array();
$location = explode("/", $_SERVER['PHP_SELF']);
$folder = $location[count($location) - 2];
}
else {
$folder = $_SERVER['PHP_SELF'];
}
//script, runs in background
$host = HOST;
$remote_house = 'https://'.$host.'/'.$folder.'/controllers/background';
$socketcon = fsockopen($host, 80);
if($socketcon) {
$socketdata = "GET $remote_house/".$scriptName." HTTPS 1.1\r\nHost: $host\r\nConnection: Close\r\n\r\n";
fwrite($socketcon, $socketdata);
fclose($socketcon);
}这在本地主机和使用HTTP的联机上都能正常工作,但在HTTPS上却无法处理这个错误。
HTTP/1.0 400坏请求缓存-控制:无缓存连接:关闭内容-类型: text/html 400坏请求您的浏览器发送了无效的请求。
有什么想法吗?
发布于 2018-10-24 08:11:11
$socketdata = "GET $remote_house/".$scriptName." HTTPS 1.1\r\n...这既是无效的HTTP,也是无效的HTTPS请求。首先,应该是HTTP/1.1而不是HTTPS 1.1。对于HTTPS,您需要首先创建到对等端的SSL/TLS连接,然后可以通过此连接发送HTTP请求。
$remote_house = 'https://'.$host.'/'.$folder.'/controllers/background';此外,请求中的path组件不应该包含完整的URL,而应该只包含路径,即'/'.$folder.'/controllers/background'。
$socketcon = fsockopen($host, 80);对于HTTPS,您需要连接到端口443,而不是80,然后在发送HTTP请求之前在那里进行SSL/TLS握手。
https://stackoverflow.com/questions/52962925
复制相似问题