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とは別に表示されます。
私の回避策は、subprocess
でcurl
を呼び出すことですが、なぜこれが失敗するのかを理解したいと思います。
public class ContactResource extends ServerResource {
@Get
public String represent() throws Exception {
return "<contact details>";
}
//....
}
私はあなたがより多くの情報/コード
異なるタイムアウト値を試すとどうなりますか? 'urllib2.urlopen(" ... "、timeout = 1)'? – Seth
タイムアウトが1または2の場合、「urllib2.URLError:」と表示され、handle.read()は空の文字列を返します。 –
RestletアプリケーションはUser-AgentまたはAcceptヘッダーに基づいて動作を変更するように設計されていますか?また、ログにurllib2が表示されているというあなたのコメントは、サーバーが接続して応答していることを示しています - urllib2は応答がこれまで通り来るとは思わないでしょうか? –