Zend_Http_Client и cURL удаляют новые строки

Я пытаюсь получить 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();

Ответ - все в одну строку.

Если я получаю $url с помощью curl, он находится на отдельных строках.

Кроме того, я смотрю на источник, а не на 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);

Любые идеи


person Yisrael Dov    schedule 23.05.2011    source источник
comment
Похоже, сервер отправляет его без новых строк!   -  person BenMorel    schedule 23.05.2011


Ответы (3)


Можете ли вы попробовать настроить Zend_Http_Client с адаптером cURL:

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

Кроме того, вы уверены, что не отображаете $response->getRawBody() в своем браузере, который интерпретирует его как HTML, поэтому новые строки интерпретируются как пробелы? Если щелкнуть правой кнопкой мыши -> показать исходный код, появятся ли новые строки?

person BenMorel    schedule 23.05.2011
comment
Спасибо, но я пробовал Zend_Http_Client_Adapter_Curl , не сработало. - person Yisrael Dov; 23.05.2011
comment
Также я смотрю на источник, а не на версию html. - person Yisrael Dov; 23.05.2011

Почему вы используете getRawBody(), а не getBody()? rawBody() обычно не тот, который вам нужен, и может быть закодирован в той или иной форме.

В любом случае вы можете опубликовать заголовки ответов, которые вы получаете от сервера? Также не помешала бы ссылка на сам файл или несколько строк из него.

$response = $client->getLastResponse();
echo $response->getHeadersAsString();
person shevron    schedule 24.05.2011
comment
Я использовал getBody() в начале, вот где проблема началась. - person Yisrael Dov; 24.05.2011
comment
Также я не могу опубликовать файл (конфиденциальная информация). Также, если в строке запроса есть ошибка, я возвращаю html, а не csv. HTML имеет окончания строк. - person Yisrael Dov; 24.05.2011
comment
Можете ли вы хотя бы опубликовать заголовки ответов? Не помешала бы даже пара строк из тела с удаленным деликатным материалом. В целом крайне маловероятно, что Z_H_C удалит какие-либо данные из тела. Извините за глупые вопросы, а что вы используете для просмотра исходников? Возможно ли, что это какая-то программа Windows, которая заставляет \n окончания строки отображаться в одной строке, потому что они не являются \r\n? Можете ли вы проверить CSV-файл в каком-нибудь шестнадцатеричном просмотрщике, чтобы убедиться, что между строк ничего нет? - person shevron; 16.06.2011

На самом деле это не ответ, но обходной путь - использовать системный вызов 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'`;
person Yisrael Dov    schedule 23.05.2011
comment
Если вы можете совместно использовать заголовки ответа из вызова Zend_Http_Client и заголовки ответа из командной строки curl (запустите curl -I ‹url›), это может дать ключ к пониманию того, почему это происходит. - person shevron; 24.05.2011