Eki kullanarak soket: Content-eğilim ile dosyanın içeriğini görmek

2 Cevap php

Ben bir dinamik. Csv dosyasının içeriğini ayrıştırmak istiyorum. Ancak, (tabii ki duff dosya adları, vb) bu ​​kodu:

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

Sadece ... dosyasını indirir.

Openssl kullanarak komut satırında ben aynı isteği yazıp geri gönderdi şu yanıt başlığını alabilirsiniz:

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

Dosya indirme işlemi otomatik olarak belki tarayıcı başlıklarında bir dizi olarak fgets tarafından tepki çıkışını gördüğü umuduyla, substr kullanarak ilk karakteri kesmek için çalıştık zorunda kalmamak için geçerli belge. Bu işe yaramadı. Ben de ya da işe yaramadı soketi, açmadan önce satırsonlarının bir demet eklemek için çalıştı aynı fikri takip.

Benim iki soru vardır:

  1. Neden yeryüzünde tarayıcı o dosyayı yüklemeniz gerekir düşünüyor?
  2. Ben bunu nasıl durdurabilirim?

Ben sadece şimdiye kadar Chrome'u kullanmış bahsetmeliyiz, ama bir fark neden görmüyorum.

Many thanks, Andreas

2 Cevap

Tamam, ben aslında bunu kendim çözmek başardı. Referans için, bunun yerine soru kaldırma ben düzeltme ile bu yanıtı ekleyin.

Sorun olmasıyla

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

Ben ssl protokolünü kullanmak için belirtmek vermedi. Yani düzeltme yerine yazmaktır:

fsockopen("ssl://www.example.com", 443);

Sen cURL veya some other wrapper bunu kullanarak düşünebiliriz.