2016-10-29 12 views
8

転送:カール::のErr :: PartialFileError:私はレールコンソールで、次のコードを実行しようとしている部分的なファイルエラー

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

しかし、私は次のエラーを取得しています。誰もこれを修正する方法を提案することはできますか?このURLは応答を返すのにかなり遅いようです。ファイル転送が完了するまで、接続が終了するのを止めるために何かできますか?

* 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

は、あなたの質問に答えの正しさを確認し、(もしあれば)の有効な解決策をマークする瞬間を惜しましてくださいが、おかげでこれを比較し –

答えて

2

サイトに間違った「Content-Length」ヘッダーがあります。したがって、カールは正しく解析できません。

ce.body 

私はそれはあなたの

+0

: 'ce.body.size' => 'body = Net :: HTTP.get(' www.homestolove.com.au '、'/bathroom-profile-fresh-approach-2391 ')の '303247と' body.size' => 664185' –

+0

たとえば、 'Net :: HTTP'を使うと' body'に完全なHTMLコンテンツが得られます( '' –

5

を助け願っていますそれはと思われる:

だからここにあるのはただヘッダを飛ばしてみましょう、と自分

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 

し、その結果にそれを取るためにカールしましょうencodinggzipに設定されています。

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

出力:

* 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

で終わります)。(_curb v0.9.3_) SOのすべての回答のみが簡潔であれば。 – da1chy

+0

これは** TL; DR **バージョンです。カーテンの後ろで何が起きているのか説明していませんでした:P – shime

+0

@shime、幸いなことに、宝石縁石はオープンソースなので、カーテンの後ろに何が起こっているのか誰でも見ることができます...私のヒントは次の行から始めることです:https://github.com/taf2/curb/blob/master/ext/curb_easy.c#L667 –

関連する問題