2013-07-23 11 views
8

Nie jestem do końca pewien, na czym polega problem.Jak połączyć się z witryną https ze Scrapy za pośrednictwem Polipo nad TOR?

Running Python 2.7.3 i Scrapy 0.16.5

I utworzeniu bardzo proste Scrapy pająka przetestowania podłączenia do mojego lokalnego pełnomocnika Polipo więc mogę wysyłać żądania za pośrednictwem TOR. Kod podstawowy mojego pająka jest następujący:

from scrapy.spider import BaseSpider 

class TorSpider(BaseSpider): 
    name = "tor" 
    allowed_domains = ["check.torproject.org"] 
    start_urls = [ 
     "https://check.torproject.org" 
    ] 

    def parse(self, response): 
     print response.body 

Dla mojego pośredniczące proxy, mam zdefiniowane:

class ProxyMiddleware(object): 
    def process_request(self, request, spider): 
     request.meta['proxy'] = settings.get('HTTP_PROXY') 

Moja HTTP_PROXY w moim pliku ustawień definiuje się jako HTTP_PROXY = 'http://localhost:8123'.

Teraz, jeśli zmienię adres startowy na http://check.torproject.org, wszystko działa poprawnie, bez problemów.

Jeśli próbuję uruchomić przeciwko https://check.torproject.org, pojawia się błąd 400 Bad żądania za każdym razem (Próbowałem również różne https: // strony, a wszystkie z nich mają ten sam problem):

2013-07-23 21:36:18+0100 [scrapy] INFO: Scrapy 0.16.5 started (bot: arachnid) 
2013-07-23 21:36:18+0100 [scrapy] DEBUG: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState 
2013-07-23 21:36:18+0100 [scrapy] DEBUG: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, RandomUserAgentMiddleware, ProxyMiddleware, RetryMiddleware, DefaultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2013-07-23 21:36:18+0100 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2013-07-23 21:36:18+0100 [scrapy] DEBUG: Enabled item pipelines: 
2013-07-23 21:36:18+0100 [tor] INFO: Spider opened 
2013-07-23 21:36:18+0100 [tor] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2013-07-23 21:36:18+0100 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
2013-07-23 21:36:18+0100 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2013-07-23 21:36:18+0100 [tor] DEBUG: Retrying <GET https://check.torproject.org> (failed 1 times): 400 Bad Request 
2013-07-23 21:36:18+0100 [tor] DEBUG: Retrying <GET https://check.torproject.org> (failed 2 times): 400 Bad Request 
2013-07-23 21:36:18+0100 [tor] DEBUG: Gave up retrying <GET https://check.torproject.org> (failed 3 times): 400 Bad Request 
2013-07-23 21:36:18+0100 [tor] DEBUG: Crawled (400) <GET https://check.torproject.org> (referer: None) 
2013-07-23 21:36:18+0100 [tor] INFO: Closing spider (finished) 

i właśnie dokładnie sprawdzić, że to nie jest coś nie tak z moim TOR/Polipo skonfigurować, jestem w stanie uruchomić następujące polecenia curl w terminalu, a następnie podłącz prawidłowo: curl --proxy localhost:8123 https://check.torproject.org/

Wszelkie sugestie co do tego, co się dzieje tutaj?

+0

Do czego służy Twój https_proxy? HTTP i HTTPS są zazwyczaj wysyłane przez różne porty itp. I będą wymagać różnych serwerów proxy. – Andenthal

+0

Nie jestem pewien, czy podążam. Z pewnością połączenie z serwerem proxy HTTP, który z kolei łączy się z adresem URL HTTPS, powinno działać poprawnie? Dlaczego miałbym łączyć się z proxy HTTPS, aby połączyć się z adresem URL HTTPS? Jeśli tak, to czy powyższe polecenie cURL nie powiedzie się? –

Odpowiedz

0
+4

Mimo że twoje łącza mogą zawierać odpowiedzi, jednym z celów StackOverflow jest katalogowanie i organizowanie rzeczywistych rozwiązań problemów, a nie tylko linka, która może przerwać lub wymagać dodatkowego analizowania. Jeśli możesz podsumować odpowiednie części w odpowiedzi i użyć linków jako odniesień, to Twoja odpowiedź będzie bardziej akceptowalna. Zobacz [tę stronę] (http://stackoverflow.com/questions/how-to-answer), aby uzyskać więcej wskazówek. – beroe

0

Spróbuj

rq.meta['proxy'] = 'http://127.0.0.1:8123' 

w moim przypadku to działa

Powiązane problemy