2016-10-29 14 views
8

próbuję wykonać następujący kod w konsoli szyn:Curl :: Err :: PartialFileError: Przeniesione błąd częściowego pliku

ce = Curl::Easy.new("http://www.homestolove.com.au/bathroom-profile-fresh-approach-2391") 
ce.verbose=true 
ce.perform 

Ale otrzymuję następujący błąd. Czy ktoś może zasugerować, jak to naprawić? Wygląda na to, że ten adres URL jest dość powolny w zwracaniu odpowiedzi. Czy możemy zrobić cokolwiek, aby przerwać połączenie przed zakończeniem przesyłania plików?

* Adding handle: conn: 0x95f3210 
* Adding handle: send: 0 
* Adding handle: recv: 0 
* Curl_addHandleToPipeline: length: 1 
* - Conn 0 (0x95f3210) send_pipe: 1, recv_pipe: 0 
* About to connect() to www.homestolove.com.au port 80 (#0) 
* Trying 52.85.77.138... 
* Connected to www.homestolove.com.au (52.85.77.138) port 80 (#0) 
> GET /bathroom-profile-fresh-approach-2391 HTTP/1.1 
Host: www.homestolove.com.au 
Accept: */* 

< HTTP/1.1 200 OK 
< Content-Type: text/html; charset=utf-8 
< Content-Length: 717180 
< Cache-Control: public, max-age=1800 
< Cache-Control: no-cache="set-cookie" 
< Date: Sat, 29 Oct 2016 06:22:49 GMT 
< ETag: W/"af17c-wej92PccZYKK1ePeKXoQ1Q" 
* Server nginx is not blacklisted 
< Server: nginx 
< Strict-Transport-Security: max-age=31536000; includeSubdomains 
< X-Frame-Options: SAMEORIGIN 
< X-Powered-By: Express 
< X-XSS-Protection: 1; mode=block 
< Vary: Accept-Encoding,Accept-Encoding 
< X-Cache: Miss from cloudfront 
< Via: 1.1 94812f867206232855f09570ec52b557.cloudfront.net (CloudFront), 1.1 wsg.Lehi05 
< X-Amz-Cf-Id: qiwFsn3d4lSmNZTSC_BVojcZmWjU1Toba7XagEiFCe-zlywo6GlkVw== 
< Age: 2 
< 
* transfer closed with 431831 bytes remaining to read 
* Closing connection 0 
Curl::Err::PartialFileError: Transferred a partial file 
    from /opt/rails/test/shared/bundle/ruby/1.9.1/gems/curb-0.9.3/lib/curl/easy.rb:73:in `perform' 
    from (irb):5 
    from /opt/rails/test/shared/bundle/ruby/1.9.1/bundler/gems/rails-efa67857350e/railties/lib/rails/commands/console.rb:47:in `start' 
    from /opt/rails/test/shared/bundle/ruby/1.9.1/bundler/gems/rails-efa67857350e/railties/lib/rails/commands/console.rb:8:in `start' 
    from /opt/rails/test/shared/bundle/ruby/1.9.1/bundler/gems/rails-efa67857350e/railties/lib/rails/commands.rb:41:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 
+0

proszę poświęcić chwilę, aby sprawdzić poprawność odpowiedzi na swoje pytanie, a zaznaczyć ważne rozwiązanie (jeśli w ogóle), dzięki –

Odpowiedz

2

Witryna ma nieprawidłowy nagłówek "Długość treści". Zatem zwijanie nie może poprawnie go przeanalizować.

Więc po prostu pominąć nagłówek i niech curl wziąć go na własnym

ce = Curl::Easy.new("http://www.homestolove.com.au/bathroom-profile-fresh-approach-2391") 
ce.verbose = true 
ce.ignore_content_length = true # add the line 
ce.perform 

oraz wynik jest tutaj:

ce.body 

Mam nadzieję, że pomógł Ci

+0

Porównaj to: 'ce.body.size' => 303247 i 'body.size' => 664185 z' body = Net :: HTTP.get ('www.homestolove.com.au', '/ bathroom-profile-fresh-approach-2391') ' –

+0

W poprzednim na przykład, jeśli użyjesz 'Net :: HTTP', otrzymasz kompletną zawartość HTML w' body' (kończy się '' –

5

Wydaje się, że działa z zestawem encoding ustawionym na gzip

ce = Curl::Easy.new("http://www.homestolove.com.au/bathroom-profile-fresh-approach-2391") 
ce.verbose = true 
ce.encoding = 'gzip' 
ce.perform 

wyjściowa:

* Trying 216.137.61.96... 
* Connected to www.homestolove.com.au (216.137.61.96) port 80 (#0) 
> GET /bathroom-profile-fresh-approach-2391 HTTP/1.1 
Host: www.homestolove.com.au 
Accept: */* 
Accept-Encoding: gzip 

< HTTP/1.1 200 OK 
< Content-Type: text/html; charset=utf-8 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< Cache-Control: public, max-age=1800 
< Cache-Control: no-cache="set-cookie" 
< Content-Encoding: gzip 
< Date: Sun, 06 Nov 2016 19:49:27 GMT 
< ETag: W/"a7c31-QuyLkXEk3HhTu/KMM5QDNQ" 
< Server: nginx 
< Strict-Transport-Security: max-age=31536000; includeSubdomains 
< X-Frame-Options: SAMEORIGIN 
< X-Powered-By: Express 
< X-XSS-Protection: 1; mode=block 
< Vary: Accept-Encoding 
< Age: 162 
< X-Cache: Hit from cloudfront 
< Via: 1.1 e24fef4a7b03bd84e1e8d57f2471a84d.cloudfront.net (CloudFront) 
< X-Amz-Cf-Id: 96AZ5p0ts5UZdPXTEpCk8S3wEQJk9a4vZD7vhY-8sXHX_NTyGSUouA== 
< 
+1

Działa na moim komputerze (_curb v0.9.3_). Jeśli tylko wszystkie odpowiedzi na SO były zwięzłe. – da1chy

+0

To jest wersja ** TL; DR **, nie wyjaśniłeś, co dzieje się za zasłonami: P – shime

+0

@shime, na szczęście krawężnik gem jest open-source, więc każdy może sprawdzić, co dzieje się za zasłonami ... moja wskazówka zaczyna się od tej linii: https://github.com/taf2/curb/blob/master/ext/curb_easy.c#L667 –

Powiązane problemy