2016-09-27 116 views
1

我想登錄到一個網頁,但是,問題 - 據我不能告訴 - 是我的用戶名和密碼沒有通過post請求。如何登錄到一個頁面登錄是可選

到目前爲止,我已經試過:

with requests.Session() as s: 
    p = s.post('http://www.marinetraffic.com/en/users/ajax_user_menu?', headers=user_agent1, data=payload) 
    r = s.get('http://www.marinetraffic.com/en/ais/index/port_moves/all/include_anchs:yes/ship_type:7/_:3525d580eade08cfdb72083b248185a9/in_transit:yes/time_interval:1474912018_1474998300/per_page:50/port:2341/portname:MUMBAI') 

哪裏user-agent是我的用戶代理,並​​是我有效的登錄憑據。對於postget請求,我都會得到一個200響應,但是我看到的頁面與我沒有登錄過的頁面相同,即結果沒有按照URL指示的方式進行過濾。

如何確保我已登錄?

回答

1

它實際上是完全你貼錯了網址,您需要發佈到https://www.marinetraffic.com/en/users/ajax_login並設置正確的標題:

data = [("_method", (None, "POST")), ("data[email]", (None, "[email protected]")), 
     ("data[password]", (None, "pass"))] 
with requests.Session() as s: 

    s.headers.update({"User-Agent": "Mozilla/5.0 (X11; Linux x86_64)", 
        "X-Requested-With": "XMLHttpRequest"}) 
    p = s.post("https://www.marinetraffic.com/en/users/ajax_login", files=data) 
    print(p.content) 
    print(s.get("http://www.marinetraffic.com/en/ajax_user_settings/get_user_settings").json()) 

爲了記錄這也將工作:

with requests.Session() as s: 
    data = dict(email="[email protected]", password="pass", _method="POST") 
    s.headers.update({"User-Agent": "Mozilla/5.0 (X11; Linux x86_64)", 
        "X-Requested-With": "XMLHttpRequest"}) 
    p = s.post("https://www.marinetraffic.com/en/users/ajax_login", data=data) 
    print p.content 
    print(s.get("http://www.marinetraffic.com/en/ajax_user_settings/get_user_settings").json()) 
+0

謝謝,但是我不斷收到'Response [403]',除非我包含'User-Agent'。我會把它放在'data'中? –

+1

@ 345243lkj,請參閱編輯 –

+0

它似乎仍然沒有登錄。也許是因爲登錄不可用於給定的URL?我不認爲用戶名和密碼正確傳遞。這可能嗎? –

-1

試試這個:

payload={ 
    '_method':'POST', 
    'email':your email, 
    'password':your passwd, 
    'is_ajax':True 
} 

p = s.post('http://www.marinetraffic.com/en/users/ajax_login', headers=user_agent1, data=payload) 
+1

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – andreas