1

Pythonでダウンローダーを作成したいのですが、ライブラリとしてPycURLを使用していますが、問題が発生しました。ダウンロードしたいファイルのサイズがわかりません。これが私のコードの一部です:

import pycurl
url = 'http://www.google.com'
c = pycurl.Curl()
c.setopt(c.URL, url)
print c.getinfo(c.CONTENT_LENGTH_DOWNLOAD)
c.perform()

このコードをPythonシェルでテストすると問題ありませんが、関数として記述して実行すると、サイズの代わりに-1が表示されます。何が問題ですか?

(コードは編集されています)

4

3 に答える 3

4

この答えは不足c.setopt(c.NOBODY, 1)しているものを追加し、それ以外は数ヶ月前に与えられたものと同じです:

import pycurl

c = pycurl.Curl()
c.setopt(c.URL, 'http://www.alfe.de')
c.setopt(c.NOBODY, 1)
c.perform()
c.getinfo(c.CONTENT_LENGTH_DOWNLOAD)

呼び出すc.setopt(c.NOBODY, 1)前に呼び出すc.perform()と、ファイルの内容(「本文なし」、ただしすべてのヘッダー)がダウンロードされなくなります。

于 2013-02-20T15:55:50.663 に答える
2

pycurlCurlオブジェクトのドキュメントから:

getinfoメソッドは、performが呼び出されて終了しない限り、呼び出さないでください。

getinfo電話をかける前に電話をかけていますperform

これがあなたの例の簡略化されたバージョンです、これは機能しますか?

import pycurl

url = 'http://www.google.com'
c = pycurl.Curl()
c.setopt(c.URL, url)
c.perform()
print c.getinfo(c.CONTENT_LENGTH_DOWNLOAD)

HTMLコンテンツの後にサイズが表示されます。

于 2012-09-21T02:33:35.483 に答える
0

デバッグを追加して、実際に何が起こるかを確認してください。curlを作成したら、次のようにします。

def curl_debug(debug_type、msg):
    print( "debug:%s%s"%(repr(debug_type)、repr(msg)))

c.setopt(pycurl.VERBOSE、1)
c.setopt(pycurl.DEBUGFUNCTION、curl_debug)
于 2012-09-22T08:41:34.563 に答える