5

HTTPヘッダー情報を取得するためにPython3.xコードサンプルを探し回っています。

PHPで同等のget_headersのような単純なものは、Pythonでは簡単に見つけることができません。あるいは、頭を包むのに最適な方法がわからないのかもしれません。

本質的には、URLが存在するかどうかを確認できるものをコーディングしたいと思います

の行の何か

h = get_headers(url)
if(h[0] == 200)
{
   print("Bingo!")
}

これまでに試しました

h = http.client.HTTPResponse('http://docs.python.org/')

しかし、常にエラーが発生しました

4

4 に答える 4

11

でHTTP応答コードを取得するには、次のurllib.requestモジュールを使用します。

>>> import urllib.request
>>> response =  urllib.request.urlopen(url)
>>> response.getcode()
200
>>> if response.getcode() == 200:
...     print('Bingo')
... 
Bingo

返されたHTTPResponseオブジェクトは、すべてのヘッダーへのアクセスも提供します。例えば:

>>> response.getheader('Server')
'Apache/2.2.16 (Debian)'

の呼び出しがurllib.request.urlopen()失敗した場合、が発生します。これを処理して、応答コードを取得できます。HTTPError Exception

import urllib.request
try:
    response = urllib.request.urlopen(url)
    if response.getcode() == 200:
        print('Bingo')
    else:
        print('The response code was not 200, but: {}'.format(
            response.get_code()))
except urllib.error.HTTPError as e:
    print('''An error occurred: {}
The response code was {}'''.format(e, e.getcode()))
于 2013-02-19T04:24:27.373 に答える
2

Python2.xの場合

ここでは、urllib、urllib2、またはhttplibを使用できます。ただし、urllibとurllib2はhttplibを使用することに注意してください。したがって、このチェックを何度も(数千回)実行する予定があるかどうかによっては、httplibを使用することをお勧めします。追加のドキュメントと例はここにあります。

コード例:

import httplib
try:
    h = httplib.HTTPConnection("www.google.com")
    h.connect()
except Exception as ex:
    print "Could not connect to page."

Python3.xの場合

Python 2.xのurllib(またはurllib2)およびhttplibと同様の話が、Python3.xのurllib2およびhttp.clientライブラリに適用されます。繰り返しますが、http.clientはより高速である必要があります。その他のドキュメントと例については、こちらをご覧ください。

コード例:

import http.client

try:
    conn = http.client.HTTPConnection("www.google.com")
    conn.connect()    
except Exception as ex:
    print("Could not connect to page.")

ステータスコードを確認したい場合は、交換する必要があります

conn.connect()

conn.request("GET", "/index.html")  # Could also use "HEAD" instead of "GET".
res = conn.getresponse()
if res.status == 200 or res.status == 302:  # Specify codes here.
    print("Page Found!")

どちらの例でも、URLが存在しない場合に関連する特定の例外をすべてではなくキャッチしたい場合は、代わりにsocket.gaierror例外をキャッチしてください(ソケットのドキュメントを参照)。

于 2013-02-19T04:29:57.060 に答える
2

リクエストモジュールを使用して確認できます。

import requests
url = "http://www.example.com/"
res = requests.get(url)
if res.status_code == 200:
    print("bingo")

ヘッダーを使用して、Webページのコンテンツ全体をダウンロードする前にヘッダーの内容を確認することもできます。

于 2017-11-28T06:06:07.253 に答える
1

urllib2ライブラリを使用できます

import urllib2
if urllib2.urlopen(url).code == 200:
    print "Bingo"
于 2013-02-19T04:08:41.383 に答える