Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: cURL i NOBODY
Forum PHP.pl > Forum > PHP
sparco
Witam.

Mam nietypowy problem z curlem, a mianowicie z opcją NOBODY. Teoretycznie użycie tej opcji wyklucza ciało w odpowiedzi. Celem jest wyciągnięcie nagłówków z dużego pliku.
Problem w tym, że po użyciu NOBODY przetwarzany plik zwraca ciało ( gdy plik ma dyży rozmiar jest błąd 500 ).

Kod:

  1. $ch = curl_init($direct_link);
  2. curl_setopt($ch, CURLOPT_HEADER, 1);
  3. curl_setopt($ch, CURLOPT_NOBODY, 1);
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_POST, 1);
  6. curl_setopt($ch, CURLOPT_POSTFIELDS, 'jakispost=1');
  7. curl_setopt($ch, CURLOPT_REFERER, $ref);
  8. curl_setopt($ch, CURLOPT_USERAGENT, $this -> userAgent);
  9. $content = curl_exec($ch);
  10. curl_close($ch);


Z góry dziękuję za pomoc wink.gif
Crozin
Żądanie typu HEAD?
sparco
Możesz rozwinąć? Bo nie bardzo rozumiem...
Crozin
A czego nie rozumiesz? Specyfikacja protokołu HTTP jest dosyć jasna w tej kwestii.
sparco
Przeczytałem specyfikacje protokołu ale dalej nic mi to nie mówi dlaczego opcja NOBODY nie działa, tz ciało pliku zostaje dołączone do odpowiedzi.
ylk
hmmm... curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');
questionmark.gif
sparco
Niestety nie pomogło. Nagłówek wyciągnięty wraz z ciałem pliku:

  1. HTTP/1.1 200 OK Server: nginx/1.0.6 Date: Mon, 05 Mar 2012 21:23:15 GMT Content-Type: application/octet-stream Content-Length: 586686 Last-Modified: Thu, 01 Mar 2012 21:12:52 GMT Connection: close Set-Cookie: PHPSESSID=d2c9be88c68f227aadac9a87d62402b3; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Accept-Ranges: none Content-Disposition: attachment; filename="aaaaaaa.rar" Accept-Ranges: bytes
kiler129
Jeśli wykonujesz zapytanie HEAD to dostajesz własnie to co pokazałeś czyli wszystkie nagłówki. Może podaj jakiś URL do testów bo to lekko niemożliwe aby nginx serwował plik przy zapytaniu HEAD smile.gif
sparco
Z przykłądem ciężko bo plik jest zabezpieczony tokenem. DOkładnie rzecz biorąc jest to skrypt pobierający dane o pliku z hellshare.pl.
Odczytuje token, łączy się z plikiem i jego zadaniem jest odczytnie rozmiaru i nazwy pliku. Niestaty przy dużych plikach staje się to niemożliwe bo cały plik zostaje wczytywany.
Crozin
Mój błąd... CURL-owska opcja NOBODY to nic innego jak ustawienie metody żądania na HEAD. Właściwie to możesz skorzystać z get_headers().
sparco
Problem z tym, że musze wysyłać POSTa i get_headers() odpada.
Crozin
Mógłbyś przygotować jakieś testowe konto i testowy plik na tej stronie? Wygląda na to, że ich serwery źle przetwarzają żądanie typu HEAD, a sam CURL, a przynajmniej PHP-owskie bindingi nie oferują niczego do przerwania odczytywania po odczytaniu nagłówków. Ewentualnie możesz spróbować bawić się z CURLOPT_READFUNCTION, ale nie wiem czy to pomoże.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.