我需要以某種方式從Scrapy中的Request
對象中提取純HTTP請求消息(以便我可以複製/粘貼此請求並從Burp運行)。從Scrapy中的請求對象獲取HTTP請求消息
因此,如果給定scrapy.http.Request
對象,我希望得到相應的請求消息,例如,
POST /test/demo_form.php HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
顯然,我有我需要在Request
對象的所有信息,但試圖重構消息手動是容易出錯的,因爲我可能會錯過一些邊緣情況。我的理解是,Scrapy首先將這個Request
轉換爲Twisted
對象,然後將對象寫入到TCP傳輸中。所以也許有些事情要做類似的事情,但是寫一個字符串呢?
UPDATE
我可以使用下面的代碼獲取HTTP 1.0
請求消息,這是基於http.py
。有沒有辦法做類似HTTP 1.1
請求/ http11.py
,這是實際發送的內容?我顯然希望儘可能避免從Scrapy
/Twisted
框架中複製代碼。
factory = webclient.ScrapyHTTPClientFactory(request)
transport = StringTransport()
protocol = webclient.ScrapyHTTPPageGetter()
protocol.factory = factory protocol.makeConnection(transport)
request_message = transport.value()
print(request_message.decode("utf-8"))
嗯,是的,但問題是'download_request'中所做的任何事情都離得到的請求還有很遠的距離。在很多情況下,「Twisted」修改/增加了標題下的標題,例如,添加'主機',如果失蹤等。我想知道是否有可能欺騙'扭曲'寫入字符串中的結果請求,而不是複製粘貼所有的代碼? –
讀一下'Twisted',我想我想要的是使用一個真正的'Agent',但用一個像'twisted.test.proto_helpers.StringTransport'這樣的虛擬傳輸器來提供它,它只會將請求緩存在內存中。然後,我將複製粘貼'download_request'中的代碼,但將'Agent'與'StringTransport'一起使用。我在正確的軌道上嗎?似乎無法找到任何做同樣事情的例子。 –
其實,它似乎比我想象的要容易得多..簡單地做這件事的任何缺點? protocol = webclient.ScrapyHTTPPageGetter() protocol.factory = factory protocol。makeConnection(transport) htmlRequest = transport.value() print(htmlRequest.decode(「utf-8」))' –