1

リクエストを使用して外部 URL をロードする django ビューを試すと、「モジュール」オブジェクトに属性「create_connection」がありません。ただし、対話型シェルから urllib2 または同じ要求コードを使用すると、機能します。

私の環境:

  • パイソン 2.5.2
  • 0.10.0 を要求します (このバージョンを必要とするサードパーティの API を使用しています)
  • 私のdjangoサイトのvirtualenv内にWSGIを備えたApache
  • ジャンゴ 1.4.1
  • デビアン Linux 5
  • SELinux (または同様のセキュリティ) を持っていません

実際には、まったく異なる機能に 2 つの異なる API を使用しています。どちらもリクエストが必要で、どちらもこのエラーを出します:

Exception Type: AttributeError
Exception Value: 'module' object has no attribute 'create_connection'
Exception Location: /my/virtualenv/dir/lib/python2.5/site-packages/requests/packages/urllib3/connectionpool.py in connect, line 67

例外で言及されている行は次のとおりです。

sock = socket.create_connection((self.host, self.port), self.timeout)

Python 2.5 に付属するソケットのバージョンには create_connection メソッドがないようです (2.6 で追加されました)。ただし、virtualenv 内の python インタラクティブ シェルからまったく同じコードを実行しようとしたところ、すべてが機能しました。また、リクエスト 0.10.0 は python 2.5 で動作するはずです。

リクエストが問題の一部ではないかと疑ったため、次の 2 つのテスト ビューを作成しました。

def get_requests(request):
    import requests
    r = requests.get("https://google.ca")
    return HttpResponse(r.text)

def get_urllib(request):
    import urllib2
    r = urllib2.urlopen('https://google.ca')
    return HttpResponse(r.read())

urllib ビューは機能し、リクエスト ビューでは上記と同じエラーが表示されます。

urllib が動作するという事実は、Apache がインターネットに接続する権限を持っていることを示しています (ファイアウォールの問題ではありません)。

ビューを試すときにtcpdumpを実行しましたが、リクエストは接続を試みることさえありません。

何か案は?私はそれを必要とする 2 つの異なるサードパーティ API を使用しているため、リクエスト以外のものを使用することはお勧めしません。

ありがとう。

4

4 に答える 4

0

0.10.1 から、リクエストは Python 2.5 のサポートを終了しました。

Python をアップグレードするか、リクエスト 0.10.0 バージョンのリクエストを使用してください。

0.10.1 (2012-01-23)

パイソン3サポート!2.5 のサポートを削除しました。(下位互換性なし)

于 2013-07-02T01:11:53.267 に答える