programing

파이썬의 요청 모듈을 사용하여 웹 사이트에 "로그인"하는 방법은 무엇입니까?

closeapi 2023. 7. 20. 21:57
반응형

파이썬의 요청 모듈을 사용하여 웹 사이트에 "로그인"하는 방법은 무엇입니까?

Python의 Requests 모듈을 사용하여 웹사이트에 로그인 요청을 올리려고 하는데 제대로 작동하지 않습니다.처음 듣는...그래서 나는 내 사용자 이름과 비밀번호 쿠키를 만들어야 하는지 아니면 내가 찾은 어떤 종류의 HTTP 인증 쿠키를 만들어야 하는지 알 수 없습니다.

from pyquery import PyQuery
import requests

url = 'http://www.locationary.com/home/index2.jsp'

그래서 이제, 저는 "포스트"와 쿠키를 사용해야 한다고 생각합니다.

ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}

r = requests.post(url, cookies=ck)

content = r.text

q = PyQuery(content)

title = q("title").text()

print title

제가 쿠키를 잘못 만들고 있는 것 같은 느낌이 듭니다.몰라.

로그인이 안 되면 홈페이지 제목이 'Locationary.com '으로 나오고 로그인이 안 되면 '홈페이지'로 나와야 합니다.

요청사항과 쿠키에 대해 몇가지 설명해주시고 도와주시면 감사하겠습니다 :D

감사해요.

...아직 제대로 작동하지 않았습니다.좋아요... 로그인하기 전에 홈 페이지 HTML에 다음과 같이 표시됩니다.

</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif">    </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName"  size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input  class="Data_Entry_Field_Login"  type="password" name="inUserPass"     id="inUserPass"></td>

그래서 제대로 하고 있다고 생각하지만 출력은 여전히 "Locationary.com "입니다.

두 번째 편집:

저는 오랫동안 로그인할 수 있고, 그 도메인으로 페이지를 요청할 때마다 로그인한 것처럼 내용이 표시되기를 원합니다.

다른 해결책을 찾으셨겠지만, 저와 같은 질문을 찾으시는 분들은 다음과 같은 요청을 통해 해결할 수 있습니다.

먼저 Marcus가 그랬던 것처럼 로그인 양식의 소스를 확인하여 양식이 게시하는 URL과 사용자 이름 및 암호 필드의 이름 속성 등 세 가지 정보를 얻습니다.이 예제에서는 사용자 이름과 사용자 패스에 있습니다.

그것을 얻으면, 이정를후에는을 할 수 .requests.Session()로그인 세부 정보를 페이로드로 사용하여 로그인 URL에 게시 요청을 하는 인스턴스입니다.세션 인스턴스에서 요청을 하는 것은 기본적으로 요청을 정상적으로 사용하는 것과 동일하며, 쿠키 등을 저장하고 사용할 수 있도록 지속성을 추가할 뿐입니다.

로그인 시도가 성공했다고 가정하면 세션 인스턴스를 사용하여 사이트에 추가 요청을 할 수 있습니다.사용자를 식별하는 쿠키는 요청을 승인하는 데 사용됩니다.

import requests

# Fill in your details here to be posted to the login form.
payload = {
    'inUserName': 'username',
    'inUserPass': 'password'
}

# Use 'with' to ensure the session context is closed after use.
with requests.Session() as s:
    p = s.post('LOGIN_URL', data=payload)
    # print the html returned or something more intelligent to see if it's a successful login page.
    print p.text

    # An authorised request.
    r = s.get('A protected web page url')
    print r.text
        # etc...

원하는 정보가 로그인 후 즉시 사용자가 방문하는 페이지에 있는 경우...

전화를 걸겠습니다.ck변수payload대신에, 파이썬-프로그래밍 문서에서처럼:

payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
url = 'http://www.locationary.com/home/index2.jsp'
requests.post(url, data=payload)

그렇지 않으면...

아래의 https://stackoverflow.com/a/17633072/111362 을 참조하십시오.

간단히 말해보자, 사이트의 URL이 http://example.com/ 이고 사용자 이름과 비밀번호를 입력하여 등록해야 한다고 가정하자, 로그인 페이지로 이동하여 http://example.com/login.php 라고 말하고 소스 코드를 보고 다음과 같은 작업 URL을 검색합니다.

 <form name="loginform" method="post" action="userinfo.php">

이제 사용자 정보를 가져옵니다.php는 'http://example.com/userinfo.php', 될 절대 URL을 만들고 이제 간단한 파이썬 스크립트를 실행합니다.

import requests
url = 'http://example.com/userinfo.php'
values = {'username': 'user',
          'password': 'pass'}

r = requests.post(url, data=values)
print r.content

언젠가 이것이 누군가에게 도움이 되길 바랍니다.

requests.Session()CSRF Protection(CSRF Protection)을 사용하여 양식에 기록하는 데 도움이 되는 솔루션(Flask-WTF 양식에서 사용됨).확인합니다.csrf_token은(는) 숨겨진 필드로 필요하며 사용자 이름과 암호를 사용하여 페이로드에 추가합니다.

import requests
from bs4 import BeautifulSoup

payload = {
    'email': 'email@example.com',
    'password': 'passw0rd'
}     

with requests.Session() as sess:
    res = sess.get(server_name + '/signin')
    signin = BeautifulSoup(res._content, 'html.parser')
    payload['csrf_token'] = signin.find('input', id='csrf_token')['value']
    res = sess.post(server_name + '/auth/login', data=payload)

웹 사이트 양식에서 사용자 이름에 사용되는 입력 이름 확인<...name=username.../>및 암호<...name=password../>아래 스크립트에서 교체합니다.또한 로그인할 원하는 사이트를 가리킬 URL을 바꿉니다.

login.py

#!/usr/bin/env python

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
payload = { 'username': 'user@email.com', 'password': 'blahblahsecretpassw0rd' }
url = 'https://website.com/login.html'
requests.post(url, data=payload, verify=False)

의 사용disable_warnings(InsecureRequestWarning)검증되지 않은 SSL 인증서를 사용하여 사이트에 로그인하려고 하면 스크립트의 출력이 모두 중지됩니다.

추가:

UNIX 기반 시스템의 명령줄에서 이 스크립트를 실행하려면 디렉토리(예:home/scripts이 디렉토리를 경로에 추가합니다.~/.bash_profile또는 터미널에서 사용하는 유사한 파일입니다.

# Custom scripts
export CUSTOM_SCRIPTS=home/scripts
export PATH=$CUSTOM_SCRIPTS:$PATH

그런 다음 내부에 이 파이썬 스크립트에 대한 링크를 만듭니다.home/scripts/login.py

ln -s ~/home/scripts/login.py ~/home/scripts/login

터미널을 닫고, 새 터미널을 시작하고, 실행합니다.login

일부 페이지는 로그인/통과 이상이 필요할 수 있습니다.숨겨진 필드도 있을 수 있습니다.가장 신뢰할 수 있는 방법은 검사 도구를 사용하여 로그인하는 동안 네트워크 탭을 보고 전달되는 데이터를 확인하는 것입니다.

언급URL : https://stackoverflow.com/questions/11892729/how-to-log-in-to-a-website-using-pythons-requests-module

반응형