webpy を使用して小さなサイトを作成しています。OAuth を使用したい場合、ファイアウォールが任意のサイトへの http 要求を停止することがわかりました。IE を使用してインターネットを閲覧することさえできません。
それで、管理者にいくつかのポートを開くように依頼しましたが、Python または IE が http 要求を送信するためにどのポートを使用するのかわかりません。
ありがとう!
私はあなたがリモートポートについて話していると思います。その場合は、管理者に標準のWebポートを開くように指示してください。実際、管理者がファイアウォールを介してIEを機能させる方法を知らない場合、彼は絶望的です。通りにいるランダムな人のところまで歩いて行き、誰かが見上げるまで「80と443」と言ってから、管理者を解雇してその人を雇うことをお勧めします。彼はこれ以上悪化することはできません。
管理者が自分のしていることを知っていて、直接接続する代わりにHTTPプロキシを使用することを希望する場合は、IEでプロキシを設定するように管理者に依頼し、使用する設定を確認してから、ここに戻って方法を検索してください。 PythonでHTTPプロキシを使用し(それには多くの答えがあります)、行き詰まった場合は助けを求めてください。
ローカルポートについて話している場合、非常識なファイアウォールがあるため、それらはいくつかの広い範囲からランダムに選択されます。すべての一般的なOSをカバーしたい場合は、1024〜65535のすべてを開く必要がありますが、単一のプラットフォームのみを処理する必要がある場合は、ほとんどの場合、それよりも狭い範囲を使用し、マシンが機能しない場合はプログラムを実行している場合でも、ほとんどの場合、プログラムをさらに狭い範囲に制限する方法があります(たとえば、Windowsでは255ポート程度)。詳細はグーグル「エフェメラルポート」。
ローカルポートを制限する必要がある場合、重要なのは、を呼び出すbind
前にソケットを呼び出すことconnect
です。ローカルポートについて話していると思うなら、おそらく間違っています。管理者(または採用したばかりの新しい管理者)に聞いて、確認してください。しかし、もしあなたが…</ p>
urllib
/を使用している場合urllib2
、それはあなたが望むことをする方法がないので、あなたはもうそれをすることができません。にドロップダウンできます。これにより、接続する前にソケットをバインドするために使用するタプルをhttplib
渡すことができます。使用しているものほど単純ではありませんが、HTTPを最初から実装するよりもはるかに簡単です。source_address
(host, port)
また、リクエストを確認することもできます。これには、独自のネイティブOAuthサポートがあり、おそらく送信元アドレスを指定する方法があります。(私は調べていませんが、Xを実行できるかどうかを知りたいときはいつでもrequests
、実行でき、最も明白な方法で考えています…)のAPIrequests
は、一般的に、正気で、よりシンプルで、よりクリーンなurllib2
場合に似ています。が面倒なurllib2
場合urllib2
は、通常、移植が非常に簡単です。
いずれにせよ、これをどのように行っても、一度に1つのソケットしか同じローカルポートにバインドできないという事実を考慮する必要があります。では、2つのプログラムが同時に実行されていて、両方がアウトバウンド接続を確立する必要があり、管理者が1つのポートしか指定していない場合はどうなりますか?それらの1つは失敗します。それは受け入れられますか?
そうでない場合、実際に行う必要があるのは、ある範囲のポートを開き、その範囲でを実行するコードを記述してから、成功するまでそれらrandom.shuffle
を試行することです。bind
つまり、ポートを指定するだけでなく、ソケットファクトリまたは事前に開いたソケットをフィードできるHTTPライブラリが必要になります。これは、ほとんどの場合、ポートを指定しないため、おそらく、httplib
ソース。
他のすべてが失敗した場合は、外部にプロキシするときに、必要な送信元ポート(またはポート範囲)にバインドするローカルプロキシをいつでも設定できます。次に、お気に入りの高レベルライブラリをそのまま使用して、ローカルプロキシに接続できます。ファイアウォールが、プロキシの背後で何が起こっているかを知る方法はありません。
ご覧のとおり、これは簡単ではありません。これは主に、実際にはめったにこれが行われないためです。
一般に、プログラムがポートを使用したいが、その番号を気にしない場合は、「エフェメラル ポート」を使用します。これは、リモート ポートが (サーバーによって) 固定されているクライアント アプリケーションでは一般的ですが、ローカル ポートは何の違いもありません。
多くの場合、ファイアウォールは任意のポートからの発信接続を許可し、未知のポートへの着信接続を単純にブロックします。これは、発信要求を行う内部マシンが何が適切かを判断できるようにする必要があり、悪者はすべて「公開」側にあるという理論に基づいています。
管理者から「HTTP プロキシ」を使用するように求められる場合があります。もしそうなら、ここにあなたがPythonに移植できると私が想像するRubyの指示があります: Ruby and Rails - oauth and http proxy