2016-09-08 15 views
1

私はこの作業を行うために過去6時間を試していましたが、できなかったし、無限の検索が役に立たなかったので、何か非常に根本的に間違ったことをしているのか、それとも私のロジックにマッチしたばかげたバグだから、私はそれを修正するために余分な目が必要です。
ウェブサイトのURLはthisです。
私はちょうどログインして次のページを読むために厄介なpythonコードを書いたが、私が得たのは、サーバー上の何かが私の要求を処理して間違っていると言った厄介な500エラーです。
ブラウザでのリクエストは問題なく動作します。この要求に
HTTPレスポンスコードが302(リダイレクト)Pythonリクエストを使用して特定のASP.NET Webサイトにログインすることはできません

POST /appstatus/index.aspx HTTP/1.1 
Host: www.wes.org 
Connection: close 
Content-Length: 303 
Cache-Control: max-age=0 
Origin: https://www.wes.org 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Referer: https://www.wes.org/appstatus/index.aspx 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.8,fa;q=0.6 
Cookie: ASP.NET_SessionId=bu2gemmlh3hvp4f5lqqngrbp; _ga=GA1.2.1842963052.1473348318; _gat=1 

__VIEWSTATE=%2FwEPDwUKLTg3MTMwMDc1NA9kFgICAQ9kFgICAQ8PFgIeBFRleHRkZGRk9rP20Uj9SdsjOKNUBlbw55Q01zI%3D&__VIEWSTATEGENERATOR=189D346C&__EVENTVALIDATION=%2FwEWBQK6lf6LBAKf%2B9bUAgK9%2B7qcDgK8w4S2BALowqJjoU1f0Cg%2FEAGU6r2IjpIPG8BO%2BiE%3D&txtUID=Email%40Removed.com&txtPWD=PASSWORDREMOVED&Submit=Log+In&Hidden1= 

であり、この1は私のスクリプトからの要求です。

POST /appstatus/index.aspx HTTP/1.1 
Host: www.wes.org 
Connection: close 
Accept-Encoding: gzip, deflate, br 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Upgrade-Insecure-Requests: 1 
Content-Type: application/x-www-form-urlencoded 
Origin: https://www.wes.org 
Accept-Language: en-US,en;q=0.8,fa;q=0.6 
Cache-Control: max-age=0 
Referer: https://www.wes.org/appstatus/indexca.aspx 
Cookie: ASP.NET_SessionId=nxotmb55jjwf5x4511rwiy45 
Content-Length: 303 

txtPWD=PASSWORDREMOVED&Submit=Log+In&__EVENTVALIDATION=%2FwEWBQK6lf6LBAKf%2B9bUAgK9%2B7qcDgK8w4S2BALowqJjoU1f0Cg%2FEAGU6r2IjpIPG8BO%2BiE%3D&txtUID=Email%40Removed.com&__VIEWSTATE=%2FwEPDwUKLTg3MTMwMDc1NA9kFgICAQ9kFgICAQ8PFgIeBFRleHRkZGRk9rP20Uj9SdsjOKNUBlbw55Q01zI%3D&Hidden1=&__VIEWSTATEGENERATOR=189D346C 

これはリクエストを行うスクリプトです。とても面倒であればすみませますが、すばらしいものが必要です。

import requests 
import bs4 
import urllib.parse 
def main(): 
    session = requests.Session() 
    headers = {"Origin": "https://www.wes.org", 
       "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
       "Cache-Control": "max-age=0", "Upgrade-Insecure-Requests": "1", "Connection": "close", 
       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36", 
       "Referer": "https://www.wes.org/appstatus/indexca.aspx", "Accept-Encoding": "gzip, deflate, br", 
       "Accept-Language": "en-US,en;q=0.8,fa;q=0.6", "Content-Type": "application/x-www-form-urlencoded"} 
    r = session.get('https://www.wes.org/appstatus/index.aspx',headers=headers) 
    cookies = r.cookies 
    soup = bs4.BeautifulSoup(r.content, "html5lib") 
    viewState=urllib.parse.quote(str(soup.select('#__VIEWSTATE')[0]).split('value="')[1].split('"/>')[0]) 
    viewStateGenerator=urllib.parse.quote(str(soup.select('#__VIEWSTATEGENERATOR')[0]).split('value="')[1].split('"/>')[0]) 
    eventValidation=urllib.parse.quote(str(soup.select('#__EVENTVALIDATION')[0]).split('value="')[1].split('"/>')[0]) 
    paramsPost = {} 
    paramsPost.update({'__VIEWSTATE':viewState}) 
    paramsPost.update({'__VIEWSTATEGENERATOR':viewStateGenerator}) 
    paramsPost.update({'__EVENTVALIDATION':eventValidation}) 
    paramsPost.update({"txtUID": "[email protected]"}) 
    paramsPost.update({"txtPWD": "My_So_Called_Password"}) 
    paramsPost.update({"Submit": "Log In"}) 
    paramsPost.update({"Hidden1": ""}) 
    response = session.post("https://www.wes.org/appstatus/index.aspx", data=paramsPost, headers=headers, 
          cookies=cookies) 
    print("Status code:", response.status_code) #Outputs 500. 
    #print("Response body:", response.content) 


if __name__ == '__main__': 
    main() 

ご協力いただければ幸いです。

答えて

0

あなたはあまりにも多くの作業をしていますが、有効なデータを渡さないと、値属性を直接抽出します。つまり、.select_one('#__VIEWSTATEGENERATOR')["value"]と同じです。残りはすべて同じです。初期取得後にセッションオブジェクトにCookieが設定されます。複数の単語を区切るにはアンダースコアでクラス名と小文字のためのキャメルケースを使用して、あなたのコードにそれを適用することを検討することをお勧めします慣例により

with requests.Session() as session: 
     headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"} 
     r = session.get('https://www.wes.org/appstatus/index.aspx', headers=headers) 

     soup = bs4.BeautifulSoup(r.content, "html5lib") 
     viewState = soup.select_one('#__VIEWSTATE')["value"] 
     viewStateGenerator = soup.select_one('#__VIEWSTATEGENERATOR')["value"] 
     eventValidation = soup.select_one('#__EVENTVALIDATION')["value"] 
     paramsPost = {'__VIEWSTATE': viewState,'__VIEWSTATEGENERATOR': viewStateGenerator, 
         '__EVENTVALIDATION': eventValidation,"txtUID": "[email protected]", 
        "txtPWD": "My_So_Called_Password", 
         "Submit": "Log In","Hidden1": ""} 
     response = session.post("https://www.wes.org/appstatus/index.aspx", data=paramsPost, headers=headers) 
     print("Status code:", response.status_code) 

のPython:ロジックがに沸きます。

+0

本当にありがとうございます。あなたのコードははるかにクリーンで、デバッグや理解が容易です。私は今よりきれいなコードを書く方法を学ぼうとします。あなたの助けをもう一度ありがとう。 – Sam

+0

心配はいりません。どうぞよろしくお願いいたします。 –

関連する問題