1

PHPには、次のようなコード行があります。

curl_setopt($ ch、CURLINFO_HEADER_OUT、true);

正確な意味はわかりません。trueに設定すると、応答とともにヘッダー情報を取得することを意味すると思います。ただし、setメソッドに対して呼び出されます。

Pythonのpycurlライブラリでは、私が到達できる最も近いものはでしたpycurl.INFOTYPE_HEADER_OUT。しかし、setメソッドに対して呼び出すと、エラーがスローされます。

>>> c = pycurl.Curl()
>>> c.setopt(pycurl.INFOTYPE_HEADER_OUT, 1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pycurl.error: (48, '')
>>> c.getinfo(pycurl.INFOTYPE_HEADER_OUT)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid argument to getinfo

この場合、入力する必要のある正しいPythonステートメントは何ですか?

4

2 に答える 2

3

これは設定ではなく、ライブラリによって送信される生のヘッダーを出力するためのデバッグ目的で使用されるフラグです。DEBUGFUNCTIONこれを使用するには、コールバックをとして定義してから、リターンタイプを処理する必要があります。

sent_headers = []
received_headers = []
def collect_headers(debug_type, debug_msg):
    if debug_type == pycurl.INFOTYPE_HEADER_OUT:
            sent_headers.append(debug_msg)
    if debug_type == pycurl.INFOTYPE_HEADER_IN:
            received_headers.append(debug_msg)

# somewhere later in the code

c = pycurl.Curl()
c.setopt(pycurl.URL, 'http://www.google.com/')
c.setopt(pycurl.DEBUGFUNCTION, collect_headers)
c.perform()

ドキュメントからの関連ビットは次のとおりです。

CURLOPT_DEBUGFUNCTION

次のプロトタイプに一致する関数へのポインターを渡します。intcurl_debug_callback(CURL *、curl_infotype、char *、size_t、void *); CURLOPT_DEBUGFUNCTIONは、CURLOPT_VERBOSEが有効なときに使用される標準のデバッグ機能を置き換えます。このコールバックは、curl_infotype引数で指定されたデバッグ情報を受け取ります。この関数は0を返す必要があります。この関数に渡されるchar*が指すデータはゼロで終了しませんが、size_t引数で指定されたサイズになります。

使用可能なcurl_infotype値:

CURLINFO_TEXT

データは情報テキストです。

CURLINFO_HEADER_IN

データは、ピアから受信したヘッダー(またはヘッダーのような)データです。

CURLINFO_HEADER_OUT

データは、ピアに送信されるヘッダー(またはヘッダーのような)データです。

CURLINFO_DATA_IN

データは、ピアから受信したプロトコルデータです。

CURLINFO_DATA_OUT

データは、ピアに送信されるプロトコルデータです。

于 2012-07-01T12:52:25.727 に答える
0

perform()画面にの応答を出力したくない場合は、pycurlを呼び出す特定の方法があることがわかりました。https://stackoverflow.com/a/2776815/145682を確認してください

つまり、それは単にpycurlの使い方です。phpのcurlインターフェースとはまったく同じではありません...

于 2012-07-07T06:52:34.003 に答える