2011-12-13 17 views
11

ben BashPython İstekleri modülü üzerinden HTTP istekleri yapmak, kıvrımın yapıldığı proxy ile çalışmaz mı? Niye ya?

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

I have already seen this other post on proxies with the Requests module

arıyorum yanıtını almak mümkün bu kıvırın komutunu kullanarak Duyunca Python kodumu formüle yardımcı ama bir proxy aracılığıyla talepte gerekir . Bununla birlikte, uygun proxyleri sağlarken bile çalışmıyor. Belki sadece bir şey görmüyorum?

>>> 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')) 

Ayrıca, aynı python konsolunda bir istekte bulunabilmek için urllib'i kullanabilirim. Yalnızca bir https olmayan adresindeki istekleri denemek bile başarısız oluyor.

>>> 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: 

İstekler çok zarif ve harika ancak bu örnekte nasıl başarısız olabilir? urllib/urllib2/httplib -

+0

http://pycurl.sourceforge.net/ –

+1

Bunu elimden çok fazla sorun olmadan muhtemelen kurulum ve benim Mac pycurl kullanmak (veya muhtemel herhangi hiç) biliyorum. Oldukça müthiş ve temiz olan İsteklerin kullanılmasının daha zarif çözümü için gitmeye çalışıyordum. Yine de öneri için teşekkür ederim. – dalanmiller

+0

İsteklerle kullanmak için bir vekil kurmak burada gayet iyi çalışıyor. İdeal olarak, gördüğünüz şeyi yeniden üretebiliriz ... aksi halde bize neden işe yaramadığını söylemek tek seçenek. İsteklerden yığın izi mi alıyorsunuz? Ayrıca, ağınızı izleyebilir ve gerçek istekleri kontrol edebilirsiniz, çünkü sadece curl/istekleri arasında farklı bir etki yaratmak için farklı olmaları gerektiğini tahmin edebilirim. –

cevap

8

sorun aslında Python standart url erişim kütüphaneleri aittir. Hangi kütüphanenin tam suçlu olduğunu hatırlayamıyorum, ama basitlik adına, sadece urllib olarak adlandıralım. Ne yazık ki, urllib bir http (s) proxy'si üzerinden bir https sitesine erişim için gerekli olan HTTP Connect yöntemini uygulamamaktadır. Urllib kullanarak işlevselliği ekleme çabalarım başarılı olmadı (denediğimden beri bir süre geçti). Ne yazık ki, çalıştığımı bildiğim tek seçenek bu dava için pycurl kullanmaktır.

Ancak, piton istekleri aynı API neredeyse tam olduğunu nispeten temiz bir çözümdür, ama bir pycurl arka uç yerine piton standart kütüphaneleri kullanır.

kütüphane human_curl denir. Onu kendim kullandım ve harika sonuçlar aldım.

+1

+1. Bu gem hakkında bilmiyordum. –

+1

Bu doğru değil. urllib2 **, HTTP bağlantısını (http://bugs.python.org/issue1424152) desteklerken, istek 2.0'a kadar desteklemedi (https://github.com/kennethreitz/requests/pull/1515). – schlamar

+0

+1 harika lib! Sorunlarımı çözdüm – c24b

1

cevap yukarıda believeing ​​biz urllib3 Zaman aşımına uğradı Request gibi, Max url ile aşıldı tekrar indirilmesi doğru hataları verdi oysa

human_curl , Bilinmeyen hataları gibi hatalar verdi human_curl çalıştı.

Yani, biz geri urllib3 gitti urllib3 parçacığı güvenlidir. Şimdi biz buna sunucu/vekil, Ama emin değilim ile ilgisi olabilir Tahmin , Biz bunu çözmek olamaz, "Max aşıldı tekrar indirilmesi" olsun urllib3

Tek sorun ile mutluyuz.

+1

İşyerinde istekleri kullanıyorum ve https bağlantıları üzerinden iletişim de dahil olmak üzere her şey iyi çalışıyor gibi görünüyor. Ayrıca, http isteklerini ayıklamak için proxy'leri kullanıyoruz. Sorununuza biraz ışık tutabiliyorsanız, size yardımcı olabilirim. – Ifthikhan