11

このcurlコマンドを使用すると、Bashから探している応答を取得できます

curl -v -u z:secret_key --proxy http://proxy.net:80  \
-H "Content-Type: application/json" https://service.com/data.json

Requestsモジュールを使用したプロキシに関するこの他の投稿をすでに見ました

Python でコードを作成するのに役立ちましたが、プロキシ経由でリクエストを行う必要があります。ただし、適切なプロキシを提供していても機能しません。多分私は何かを見ていませんか?

>>> requests.request('GET', 'https://service.com/data.json', \
>>> headers={'Content-Type':'application/json'}, \ 
>>> proxies = {'http' : "http://proxy.net:80",'https':'http://proxy.net:80'}, \
>>> auth=('z', 'secret_key'))

さらに、同じ python コンソールで、urllib を使用してリクエストを成功させることができます。

>>> import urllib
>>> urllib.urlopen("http://www.httpbin.org").read()
---results---

https 以外のアドレスだけでリクエストを試みても機能しません。

>>> requests.get('http://www.httpbin.org')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.6/site-packages/requests/api.py", line 79, in get
   return request('get', url, **kwargs)
File "/Library/Python/2.6/site-packages/requests/api.py", line 66, in request
    prefetch=prefetch
File "/Library/Python/2.6/site-packages/requests/sessions.py", line 191, in request
    r.send(prefetch=prefetch)
File "/Library/Python/2.6/site-packages/requests/models.py", line 454, in send
    raise ConnectionError(e)
requests.exceptions.ConnectionError: Max retries exceeded for url:

Requests は非常にエレガントで素晴らしいですが、このインスタンスで失敗する可能性はありますか?

4

2 に答える 2

9

問題は、実際には python の標準 URL アクセス ライブラリ (urllib/urllib2/httplib) にあります。どのライブラリが正確な原因なのか思い出せませんが、簡単にするために、単に urllib と呼びましょう。残念ながら、urllib は、http(s) プロキシ経由で https サイトにアクセスするために必要な HTTP Connect メソッドを実装していません。urllib を使用して機能を追加するという私の努力は成功していません (試みてからしばらく経ちました)。残念ながら、私が知っている唯一のオプションは、この場合に pycurl を使用することです。

ただし、Python リクエストとほぼ同じ API である比較的クリーンなソリューションがありますが、Python 標準ライブラリの代わりに pycurl バックエンドを使用します。

ライブラリはhuman_curlと呼ばれます。私はそれを自分で使用し、素晴らしい結果を出しました。

于 2012-01-11T09:15:05.267 に答える
1

上記の答えを信じて、human_curl を試しました

human_curl では不明なエラーなどのエラーが発生しましたが、urllib3 では Request Timed out などの正しいエラーが発生し、URL で最大再試行回数を超えました。

そこで、urllib3 に戻りました。urllib3 はスレッドセーフです。urllib3 に満足しています

唯一の問題は、「最大再試行回数を超えました」です. 解決できません. サーバー/プロキシに関係しているのではないかと推測します. しかし, よくわかりません.

于 2012-08-03T03:26:10.797 に答える