Php 带fsockopen的请求-不带标头的响应

Php 带fsockopen的请求-不带标头的响应,php,Php,我有一个发出url请求的方法: public函数发送($httpUrl,$httpParams=[],$httpHeader=[],$waitForResponse=false) { 如果($httpParams){ foreach($key=>和$val形式的httpParams){ 如果(is_array($val))$val=内爆(',',$val); $post_params[]=$key.'='.urlencode($val); } $post_string=内爆('&',$post_

我有一个发出url请求的方法:

public函数发送($httpUrl,$httpParams=[],$httpHeader=[],$waitForResponse=false)
{
如果($httpParams){
foreach($key=>和$val形式的httpParams){
如果(is_array($val))$val=内爆(',',$val);
$post_params[]=$key.'='.urlencode($val);
}
$post_string=内爆('&',$post_参数);
}
$parts=parse_url($httpUrl);
如果($parts['scheme']=='https'){
$parts['port']=5371;//wymagany端口dla nginx w php v 7.1
$parts['url']=“ssl://”$parts['host'];
}
if(!$httpHeader['Method']))
$httpHeader['Method']=“GET”;
$fp=fsockopen($parts['url']),
isset($parts['port'])?$parts['port']:80,
$errno$errstr,30);
$out=$httpHeader['Method']。“.$parts['path']”HTTP/1.1\r\n;
$out.=“主机:”.$parts[“主机”]。“\r\n”;
foreach($httpHeader作为$k=>$w){
如果($k=='Method')继续;
$out.=“$k:$w\r\n”;
}
$out.=“内容类型:应用程序/x-www-form-urlencoded\r\n”;
$out.=“内容长度:”.strlen($post\u字符串)。“\r\n”;
$out.=“连接:关闭\r\n\r\n”;
如果(isset($post_字符串))$out.=$post_字符串;
fwrite($fp,$out);
如果($waitForResponse){
$odpowiedz='';
而(!feof($fp)){
$odpowiedz.=fgets($fp,128);
}
}否则{
$odpowiedz=真;
}
fclose($fp);
返回$odpowiedz;
}
问题是,它返回带有标题的响应 比如:

我不希望只使用json字符串作为标题。

用于读取响应。使用以下代码更改fgets零件:

while (!feof($fp)) {
    $odpowiedz .= fread($this->socket, 1024);
}
然后,可以使用以下代码仅剥离身体部位:

$crlf = "\r\n";
$position = strpos($response, $crlf.$crlf);
$content = substr($response, $position + 2 * strlen($crlf));
您正在使用哪个将读取到行终止符或EOF。 因此,代码中不会有行


您应该改为稍后使用拆分标题和正文。

fread()
似乎不会加载整个响应。但您的后续代码仍然有效。@piernik,因为您需要在循环中使用它。
$crlf = "\r\n";
$position = strpos($response, $crlf.$crlf);
$content = substr($response, $position + 2 * strlen($crlf));