2013-07-23 11 views
8

Non completamente sicuro di quale sia il problema.Come connettersi al sito https con Scrapy via Polipo su TOR?

esecuzione Python 2.7.3 e 0.16.5 Scrapy

ho creato un semplice ragno Scrapy per testare la connessione alla mia procura Polipo locale in modo da poter inviare richieste tramite TOR. codice di base della mia ragno è la seguente:

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 

Per la mia delega middleware, ho definito:

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

mio HTTP_PROXY nel mio file di impostazioni è definito come HTTP_PROXY = 'http://localhost:8123'.

Ora, se cambio l'URL iniziale su http://check.torproject.org, tutto funziona correttamente, nessun problema.

Se si tenta di correre contro https://check.torproject.org, ho ottenere un 400 Richiesta Bad errore ogni volta (Ho anche provato diverse https: // siti, e tutti hanno lo stesso problema):

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) 

E solo per verificare che non sia qualcosa di sbagliato con il mio setup TOR/Polipo, sono in grado di eseguire il seguente comando di arricciatura in un terminale, e collegare bene: curl --proxy localhost:8123 https://check.torproject.org/

Qualche suggerimento su cosa c'è di sbagliato Qui?

+0

A cosa è impostato https_proxy? HTTP e HTTPS vengono generalmente inviati su porte diverse, ecc. E richiederanno diversi proxy. – Andenthal

+0

Non sono sicuro che io segua. Sicuramente la connessione a un proxy HTTP, che a sua volta si connette a un URL HTTPS, dovrebbe funzionare correttamente? Perché dovrei connettermi a un proxy HTTPS per connettermi a un URL HTTPS? In tal caso, il comando cURL sopra riportato non fallirebbe? –

risposta

0
+4

Sebbene i collegamenti possano contenere le risposte, uno degli obiettivi di StackOverflow è catalogare e organizzare le soluzioni effettive ai problemi e non solo un collegamento che potrebbe interrompersi o richiedere un'analisi aggiuntiva. Se è possibile riepilogare le parti pertinenti in una risposta e utilizzare i collegamenti come riferimenti, renderebbe la risposta più accettabile. Vedi [questa pagina] (http://stackoverflow.com/questions/how-to-answer) per ulteriori linee guida. – beroe

0

Prova

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

Nel mio caso si tratta di lavori