Zend_Http_Client和cURL正在删除换行符

时间:2011-05-23 10:32:34

标签: php zend-framework curl httpwebrequest zend-http-client

我正在尝试从远程服务器获取CSV文件并使用Zend_Http_Client下载

获取的版本删除了所有换行符。

require_once('Zend/Http/Client.php');
$client = new Zend_Http_Client($url);
//also tried the curl adapter but no change

$client->setCookieJar();
$client->setAuth('user', 'pass', Zend_Http_Client :: AUTH_BASIC);

if(!empty($params)){
   $client->setParameterGet($params);
}


$client->request();
$request = $client->getLastRequest();


$response = $client->getLastResponse();
echo $response->getRawBody();

响应全是一行。

如果我使用curl获取$url,则它位于不同的行上。

另外,我正在查看源代码,而不是HTML呈现的版本

更新

所以我用cURL重写了这一点,它仍然做同样的事情!?

 if(!empty($params)){
      $queryString = http_build_query($params);
      $url.='?'.$queryString;
 }

 $ch = curl_init($url);

 curl_setopt($ch,CURLOPT_USERPWD,"$username:$password");
 curl_exec($ch);

任何想法

3 个答案:

答案 0 :(得分:1)

您可以尝试使用cURL适配器设置Zend_Http_Client:

$client->setAdapter(new Zend_Http_Client_Adapter_Curl());

另外,你确定你没有在浏览器中显示$response->getRawBody(),它将其解释为HTML,因此将换行符解释为空格? 如果您右键单击 - > 显示来源,您是否有换行符?

答案 1 :(得分:1)

为什么使用getRawBody()而不是getBody()? rawBody()通常不是你想要的那个,并且可能以某种形式编码。

在任何情况下,您都可以发布从服务器获得的响应标头吗?此外,指向实际文件或其中几行的链接也会有所帮助。

$response = $client->getLastResponse();
echo $response->getHeadersAsString();

答案 2 :(得分:0)

不是一个真正的答案,但解决方法是使用curl系统调用。

看起来它是行结尾的问题,即使我设置了ini值也没有检测到它们。

 $urlArray = parse_url($url);

//put the params together
 if(!empty($params)){
      //split up any existing params
      $qsArray = parse_str($urlArray['query']);
      if(empty($qsArray)){
           $urlArray['query']=http_build_query($params);
      }
      else{
           $urlArray['query'] = http_build_query(array_merge($qsArray,$params));
      }
 }

 //set the username and password
 $urlArray['user']=$username;
 $urlArray['pass']=$password;


// http_build_url doesn't work so doing it by hand

 $urlString  = $urlArray['scheme'];
 $urlString .= "://";
 $urlString .= $urlArray['user'].':'.$urlArray['pass'] .'@';
 $urlString .= $urlArray['host'];
 $urlString .= $urlArray['path'];
 $urlString .= '?'.$urlArray['query'];

//     $urlString = http_build_url($urlArray);
//     echo($urlString);

//php is messing up the line endings, so using a system call
 return  `curl '$urlString'`;