2016-07-22 4 views
1

現在、私はwgetとos.systemを使用してウェブサイトからファイルをダウンロードするpythonコードの行を持っています。しかし、このwgetをurllibやリクエストなどのよりエレガントなライブラリに変換しようとすると、クッキーは認証に失敗し、代わりにファイルの代わりにログインhtmlページがダウンロードされます。ここでセッション認証にwgetの代わりにurllibを使用

は私が現在使用しているものである:

try: 
    print("Downloading file {} version: {}......".format(version, buildNo)) 
    with requests.session() as s: 
     s.post(loginUrl, data="name:{}&password:{}".format(username,password)) 
     print(URL) 
     r = s.get(URL,cookies=s.cookies, headers={"Accept": "application/octet-stream"}) 
     print (r.content) 

が、これは失敗し、代わりに、ログインページのHTMLコンテンツを印刷します。私はこのような何かにリファクタリングすることを試み

try: 
     print(URL) 
     os.system(
      "wget --save-cookies cookies.txt --keep-session-cookies --post-data='name={}&password={}' https://fakesite/login".format(
       username, password)) 
     os.system("wget --load-cookies cookies.txt --accept=exe {}".format(URL)) 

    except Exception as e: 
     print(" File not found, please refer to the website manually for download link", e) 

!誰でもこれについていくつかの光を当てることができますか?

+0

はこれをチェックおそらく:http://stackoverflow.com/questions/13854735/python-requests-managing-cookies#19129354 –

+0

私は試してみたが、ログインが成功しなかったために動作しなかったdata = {"username": "some username"、 "password": "password"}ですが、これはAPI固有のものです)。 2つの質問、ログイン応答のstatus_codeは何ですか?また、wgetの例では、ユーザ名ではなく名前を送信します。 – mkaran

+0

私は302応答を取得しますが、私はリダイレクトを許可する要求を取得しており、それでもフォロースルーに失敗します。また、私はこれを投稿した瞬間にユーザー名の問題に気付きましたが、まだ問題が解決しませんでした:( – Matchbox2093

答えて

1

あなたはあなたのクエリに代わり=:を使用する必要があります。

s.post(loginUrl, data="name={}&password={}".format(username,password)) 

また、あなたは可能性(および、requestsのベストプラクティス以下のはずです)data引数に辞書を進みます

s.post(
    loginUrl, 
    data={ 
     'name': username, 
     'password': password, 
    } 
) 
+0

ありがとう!:)これは私の問題を解決しました – Matchbox2093

+0

あなたは大歓迎です! – mingaleg

関連する問題