基本的に、XML データを取得するためにヒットしている URL があります。エンドポイントは開示できませんが、次のことを行っています。
curl -v "http://my-url.com/some/endpoint"
200 OKを返し、コンテンツはほぼ即座に返されます。
Kenneth Reitz による requests モジュールを使用して、コンテンツを返すのに 30 秒かかる POST 要求と GET 要求の両方を用意しました。
このように使用すると:
from timeit import Timer
t = Timer(lambda: requests.get(myurl).content)
print t.timeit(number=1)
30.2136261463
毎回平均 30.2 秒かかります。私のPOSTリクエストと同じです。コンテンツを要求せずに status_code 応答のみを要求すると、stream=Trueを渡さない限り同じ状況になります。応答はすぐに取得できますが、コンテンツは取得できません。
私の混乱はcurlコマンド内にあります...応答とコンテンツの両方を10ミリ秒以内に取得します。Python テストでユーザー エージェントを偽造しようとしたり、get() 関数などに多数の引数を渡そうとしたりしました。curl と python-requests が私が認識していないリクエストを実行する方法には大きな違いがあるはずです。私は初心者なので、明らかな何かが欠けている場合は申し訳ありません。
また、これのために複数のマシン、複数のバージョンのcurl、python、さらにはPostmanなどのRESTクライアントを試したことにも言及したいと思います。オプションの 1 つは、テスト内で curl へのサブプロセス呼び出しを行うことだと理解していますが、それは良い考えですか?
編集:内容が気になります。応答コード (ヘッダー) をすぐに取得できることは承知しています。
前もって感謝します、
チホミール。
アップデート:
現在、テストで pycurl2 を使用しているため、すべてに python-requests を使用できることを望んでいたため、これは単なる回避策です。なぜ curl がこれほど高速なのか、まだ興味があります。