2011-11-30 5 views
8

PythonからローカルのRestletサーバーに接続しようとしていますが、接続が無限にハングアップします(タイムアウトを設定するとタイムアウトします)。Pythonのurllib2.urlopen()は、Java Restletサーバーへのローカル接続でハングします

import urllib2 
handle = urllib2.urlopen("http://localhost:8182/contact/123") # hangs 

私は上記URLを開くにはシェルからcurlを使用している場合、結果はすぐに返します。 urllib2を使用して別のローカルサービス(たとえば、ポート8000​​のDjango Webサーバー)を開くと、urllib2は正常に動作します。

私はファイアウォールを無効にしようとしました(私はこれをOS Xでやっています)。私はlocalhostを127.0.0.1に変更しようとしました。 curlとurllib2の両方の接続のRestletからのログは、user-agentとは別に表示されます。

私の回避策は、subprocesscurlを呼び出すことですが、なぜこれが失敗するのかを理解したいと思います。

public class ContactResource extends ServerResource { 

    @Get 
    public String represent() throws Exception { 
    return "<contact details>"; 
    } 
    //.... 
} 

私はあなたがより多くの情報/コード

+0

異なるタイムアウト値を試すとどうなりますか? 'urllib2.urlopen(" ... "、timeout = 1)'? – Seth

+0

タイムアウトが1または2の場合、「urllib2.URLError:」と表示され、handle.read()は空の文字列を返します。 –

+0

RestletアプリケーションはUser-AgentまたはAcceptヘッダーに基づいて動作を変更するように設計されていますか?また、ログにurllib2が表示されているというあなたのコメントは、サーバーが接続して応答していることを示しています - urllib2は応答がこれまで通り来るとは思わないでしょうか? –

答えて

0

をしたい場合にproxyHandler(http://docs.python.org/library/urllib2.html#urllib2.ProxyHandler)はurllib2の

であり知ってみましょうはに空の辞書を渡すためにしてみてください。ここでは

は私のRestletリソースがどのように見えるかですそれは前にurlopen

urllib2.ProxyHandler([]) 
handle = urllib2.urlopen("http://localhost:8182/contact/123") 
+0

すぐに試してみます。ありがとう –

+0

@dolanもう試しましたか? – lig

+0

上記のコードは最初の行からエラーを生成します: "AssertionError:プロキシはマッピングでなければなりません"(python 2.7) –

3

私は遭遇しました彼は同様の問題を解決し、Requests packageを使用して終了しました。

関連する問題