ไม่สามารถเข้าสู่เว็บไซต์ผ่าน python ได้

ฉันกำลังพยายามเข้าสู่ระบบเว็บไซต์เพื่อรับข้อมูลบางอย่าง ฉันสังเกตเห็นว่าไม่มีข้อมูลแบบฟอร์มในวิธี 'โพสต์' แต่มี 'เพย์โหลดคำขอ' นอกจากนี้ เมื่อฉันเข้าสู่ระบบ ฉันไม่เห็นวิธีการโพสต์การเข้าสู่ระบบอีกต่อไป นี่คือภาพหน้าจอของวิธีการเข้าสู่ระบบโพสต์ผ่านเครือข่าย:

คำอธิบาย

เมื่อฉันเข้าสู่ระบบ หน้าถัดไปแสดงว่าฉันใช้รหัสต่อไปนี้เพื่อเข้าสู่ระบบ:

 import requests
 urlData = 'https://b*********.dk/Account/Market'
 urlLogin = 'https://b**********an.dk/


 with requests.Session() as c:
     urlLogin = 'https://b*************n.dk/Authorization/
     c.get(urlLogin)
     NetSession = c.cookies['ASP.NET_SessionId']
     login_data = {
                   'ASP.NET_SessionId': NetSession,
                   'username':"A******",
                   'Password':"q******",
                   'remmemberMe': True
                   }

lol = c.post(urlLogin, data=login_data)
print(lol.text)

การรันโค้ดนี้จะแสดงผลลัพธ์ดังนี้:

{"Processed":true,"Message":"The user name or password provided is incorrect.","NeedResetPassword":false}

เมื่อฉันป้อนรหัสผ่านผิด ค่า Processed จะเป็น false ในขณะที่ข้อมูลประจำตัวที่ถูกต้องคือ true แต่มันไม่สามารถเข้าสู่ระบบได้ มีความคิดใดว่าทำไมสิ่งนี้ถึงเกิดขึ้นได้?


person Mpizos Dimitris    schedule 02.05.2015    source แหล่งที่มา
comment
คุณจะต้องการเปลี่ยนรหัสผ่าน/ชื่อผู้ใช้นั้น ... แม้ว่าคุณจะลบมันออกด้วยการแก้ไข แต่ก็ค่อนข้างแน่ใจว่าตอนนี้จะเป็นส่วนหนึ่งของประวัติศาสตร์อย่างถาวร   -  person Foon    schedule 02.05.2015
comment
ในบันทึกคำถามที่มีประโยชน์มากกว่า ... ฉันเห็น ASP.NET; จากประสบการณ์ของผม บ่อยครั้งมีค่าที่ซ่อนอยู่อย่างน้อยหนึ่งค่าถูกส่งผ่านไปยังรูปแบบ/รูปแบบที่คล้ายกับสิ่งต่างๆ ฉันขอแนะนำให้ใช้ fiddler หรือสิ่งที่คล้ายกันเพื่อดูว่าเบราว์เซอร์จริงส่งผ่านอะไรไปบ้าง และตรวจสอบให้แน่ใจว่าโค้ดของคุณส่งสิ่งเดียวกันทุกประการ (สำหรับโปรเจ็กต์หนึ่งซึ่งรวมถึงการตั้งค่าคำขอของตัวแทนที่ใช้เพื่อจับคู่ Firefox มิฉะนั้นจะได้รับการปฏิบัติที่แตกต่างออกไป) (นอกจากนี้... ในภาพหน้าจอ คุณมีชื่อผู้ใช้และรหัสผ่าน ในรหัส คุณมีชื่อผู้ใช้และรหัสผ่าน ..ตรวจสอบให้ถูกต้องแล้ว)   -  person Foon    schedule 02.05.2015
comment
พฤติกรรมในเบราว์เซอร์คืออะไร? เป็นคำขอ XHR ดังนั้นฉันจึงสงสัยว่าพวกเขาจะตรวจสอบรายการที่ดำเนินการแล้วก่อนหรือไม่ และข้อความนั้นไม่เกี่ยวข้องหรือไม่   -  person Dwight Gunning    schedule 02.05.2015
comment
@dwightgunning ฉันคิดว่ามันไม่เกี่ยวข้อง เพราะหากฉันพยายามใช้ .get() URL ของหน้าเว็บที่ได้รับการป้องกัน ฉันได้รับข้อผิดพลาด TypeError: getresponse() got an unexpected keyword argument 'buffering'   -  person Mpizos Dimitris    schedule 02.05.2015


คำตอบ (1)


ตามที่คุณได้สังเกตเห็นอย่างถูกต้องแล้ว ข้อมูลประจำตัวดั้งเดิมจะไม่ถูกส่งโดยใช้การเข้ารหัสแบบฟอร์ม (หมายถึง &user=alice&password=secret) แต่จะถูก เข้ารหัส JSON (แทนที่จะเป็น {"user":"alice", "password": "secret"}) คุณยังสามารถดูสิ่งนี้ได้ในส่วนหัว Content-Type ของคำขอ ซึ่งก็คือ application/json โดยที่ (ซึ่งต่างจาก application/x-www-form-urlencoded อย่างอื่น)

เพื่อให้คำขอที่กำหนดเองของคุณทำงานได้ คุณอาจต้องส่งข้อมูลที่เข้ารหัส JSON ด้วย นี่คือจัดทำเป็นเอกสารความยาวในเอกสารอย่างเป็นทางการ ดังนั้นฉันจะให้เวอร์ชันสั้น:

import json

# Build session and request body just like you already did in your question
# ...

headers = {"Content-Type": "application/json"}
lol = c.post(urlLogin, data=json.dumps(login_data), headers=headers)
print(lol.json())
person helmbert    schedule 02.05.2015
comment
ขอบคุณสำหรับการตอบกลับ. ฉันเพิ่มบรรทัดเหล่านี้แล้ว แต่ไม่มีผลลัพธ์ที่แตกต่าง - person Mpizos Dimitris; 02.05.2015