2017-04-19 46 views
0

我有以下工作curl命令:HTTP GET使用代理 - curl命令的作品,但蟒蛇「請求」庫不

curl -x http://<PROXY URL>:3128 -u myUsername 'https://logs.company.net/daily-2017.04.13/_search?pretty' -d '{BIG JSON BLOB} 

我試圖將其轉換成使用請求庫蟒蛇。以下是我迄今爲止:

json_string = '''{BIG JSON BLOB}''' 

    print(json_string) 
    mydict = json.loads(json_string) # obj now contains a dict of the data 

    proxies = {"http" : "http://<proxy url>:3128"} 
    r = requests.get("https://logs.company.net/daily-2017.04.13/_search?pretty", data=json_string,auth=(self.username, self.password), proxies=proxies, verify= False) # 
    print(r.status_code, r.reason) 
    print(str(r.content)) 

據我瞭解,這基本上與上述相同,但它超時我的測試服務器上時,curl命令沒有。

有誰知道這裏有什麼問題或者我可以如何調試它?我可以使用子進程模塊在curl命令中進行黑客攻擊,但我對調試網絡的東西很陌生,我想了解爲什麼它不能正常工作,因此決定在此處詢問。

謝謝!

回答

0

根據curl命令的手動頁面時,-d標誌用於使用POST請求發佈數據:

-d/- 數據

(HTTP)發送指定的數據在一個POST請求到HTTP服務器,就像瀏覽器在用戶填寫HTML表單並按下提交按鈕時所做的一樣。這將導致curl使用內容類型application/x-www-form-urlencoded將數據傳遞到服務器。與-F/- 表單比較。

所以,你需要使用requests.post()函數,而不是requests.get()

例如:

r = requests.post("https://logs.company.net/daily-2017.04.13/_search?pretty", 
        data=json_string, 
        auth=(self.username, self.password), 
        proxies=proxies, 
        verify=False) 
+0

謝謝洛朗我有點困惑,當我在網上看到的例子,其中數據使用get仍發送()。不幸的是,改變它仍然會導致超時。 – OnMyWayToGodDontKnow

+0

@OnMyWayToGodDontKnow:你有代理服務器還是遠程服務器超時? –

+0

超時到代理。我想知道它是否可能與此相關:http://stackoverflow.com/a/8816739/2765131 – OnMyWayToGodDontKnow