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视为当前文档的一组标题。那没有用。追求同样的想法,我还尝试在打开套接字之前插入一堆换行符,但这也不起作用。

我的两个问题是:

  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 回答