Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> cURL i NOBODY
sparco
post
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 20.10.2006

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Żądanie typu HEAD?

Ten post edytował Crozin 5.03.2012, 21:35:59
Go to the top of the page
+Quote Post
sparco
post
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 20.10.2006

Ostrzeżenie: (0%)
-----


Możesz rozwinąć? Bo nie bardzo rozumiem...
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A czego nie rozumiesz? Specyfikacja protokołu HTTP jest dosyć jasna w tej kwestii.
Go to the top of the page
+Quote Post
sparco
post
Post #5





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 20.10.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ylk
post
Post #6





Grupa: Zarejestrowani
Postów: 194
Pomógł: 26
Dołączył: 9.01.2011
Skąd: /dev/null

Ostrzeżenie: (0%)
-----


hmmm... curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');
(IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
sparco
post
Post #7





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 20.10.2006

Ostrzeżenie: (0%)
-----


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


Ten post edytował sparco 5.03.2012, 22:24:30
Go to the top of the page
+Quote Post
kiler129
post
Post #8





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
sparco
post
Post #9





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 20.10.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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().
Go to the top of the page
+Quote Post
sparco
post
Post #11





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 20.10.2006

Ostrzeżenie: (0%)
-----


Problem z tym, że musze wysyłać POSTa i get_headers() odpada.
Go to the top of the page
+Quote Post
Crozin
post
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 09:01