2

リモートサーバーから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();

応答はすべて1行です。

$urlwith 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);

何か案は

4

3 に答える 3

1

cURL アダプターを使用して Zend_Http_Client をセットアップしてみてください:

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

また、$response->getRawBody()HTML として解釈するブラウザに表示していないので、改行をスペースとして解釈しますか? 右クリック -> show sourceの場合、改行はありますか?

于 2011-05-23T10:39:56.750 に答える
1

getBody() ではなく getRawBody() を使用しているのはなぜですか? rawBody() は通常、必要なものではなく、何らかの形式でエンコードされている可能性があります。

いずれにせよ、サーバーから取得した応答ヘッダーを投稿できますか? また、実際のファイルまたはその数行へのリンクも役立ちます。

$response = $client->getLastResponse();
echo $response->getHeadersAsString();
于 2011-05-24T05:47:51.033 に答える
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'`;
于 2011-05-23T20:09:22.967 に答える