1

動的 .csv ファイルの内容を解析したいと考えています。ただし、このコード (明らかに duff ファイル名など):

$socket = fsockopen("www.example.com", 443);
fwrite($socket, "GET /dynamicCsv.csv?param=value HTTP/1.1\r\n");
fwrite($socket, "Host: www.example.com\r\n");
fwrite($socket, "Connection: close\r\n");
fwrite($socket, "\r\n");

while(!feof($socket)) echo fgets($socket);

...ファイルをダウンロードするだけです。

コマンド ラインで openssl を使用すると、まったく同じ要求を入力して、次の応答ヘッダーを返すことができます。

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-disposition: attachment; filename=dynamicCsv.csv
Pragma: public
Cache-Control: max-age=0
Set-Cookie: SESSIONID=ASDFUHN023UIN0F; Path=/; Secure
Content-Type: text/csv;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 04 Feb 2010 16:53:00 GMT

ファイルが自動的にダウンロードされるのを避けるために、 を使用して最初の文字を切り捨てようとしましsubstrた。これは、ブラウザーが によって出力さfgetsれた応答を現在のドキュメントの一連のヘッダーとして認識できるようにするためです。それはうまくいきませんでした。同じ考えを追求して、ソケットを開く前にたくさんの改行を挿入しようとしましたが、どちらもうまくいきませんでした。

私の2つの質問は次のとおりです。

  1. ブラウザがファイルをダウンロードする必要があると考える理由は何ですか?
  2. どうすればそれを止めることができますか?

私はこれまで Chrome しか使っていませんでしたが、なぜそれが違いを生むのかわかりません。

どうもありがとう、アンドレアス

4

2 に答える 2

1

わかりました、私は実際にそれを自分で解決することができました。参考までに、質問を削除する代わりに、この回答を修正とともに追加します。

問題は

fsockopen("www.example.com", 443);

SSL プロトコルを使用するように指定しませんでした。したがって、修正は代わりに次のように入力することです。

fsockopen("ssl://www.example.com", 443);
于 2010-02-04T17:45:04.573 に答える
0

cURLまたはその他 のラッパーを使用することを検討できます。

于 2010-02-04T17:17:59.017 に答える