2012-10-30 3 views
16

This은 내가 사용하려고하는 모듈이며 자동으로 채우려 고하는 형식이 있습니다. Mechanize를 통해 요청을 사용하려는 이유는 Mechanize를 사용하여 요청을 작성하고 제출할 수 있기 전에 먼저 로그인 페이지를로드해야하기 때문에로드 단계를 건너 뛰고 곧바로 메시지를 게시 할 수 있습니다 (잘하면). 기본적으로, 로그인 프로세스가 가능한 적은 대역폭을 소모하도록 노력하고 있습니다.파이썬 요청 모듈을 사용하여 HTTP 포스트 요청을 시뮬레이트하는 방법은 무엇입니까?

두 번째 질문은 로그인 프로세스 및 리디렉션 후에 전체 페이지를 완전히 다운로드하지 않고 페이지 제목 만 검색하는 것입니까? 기본적으로, 제목만으로 로그인 성공 여부를 알려주므로 대역폭 사용을 최소화하고 싶습니다.

HTTP 요청 및 기타 등등의 경우 나는 멍청한 반응을 보입니다. FYI, 이것은 학교 프로젝트를위한 것입니다.

편집 질문의 첫 번째 부분에 답변했습니다. 내 질문은 이제 두 번째 부분입니다

+1

당신은 크롬을 사용할 수 있습니다 HTML 페이지는 이러한 요소가

경우 웹 양식 게시에 사용하는 관리자가 어떤 값이 브라우저에서 생성 된 게시물 요청에 전달되었는지 확인한 다음 거기에서부터 이동합니다. – bossylobster

답변

32

일부 예제 코드 :

첫 번째 단계는 소스 페이지보고 (사용 방화범/크롬/IE 도구를 제출되고있는 form 요소를 식별하는 것입니다
import requests 

URL = 'https://www.yourlibrary.ca/account/index.cfm' 
payload = { 
    'barcode': 'your user name/login', 
    'telephone_primary': 'your password', 
    'persistent': '1' # remember me 
} 

session = requests.session() 
r = requests.post(URL, data=payload) 
print r.cookies 

무엇이든 (또는 근원을 보면서). 그런 다음 input 요소를 찾고 필요한 name 속성을 식별하십시오 (위 참조).

제공하신 URL에 "Remember Me"가 있습니다. 시도하지는 않았지만 (로그인 할 수 없기 때문에) 추가 로그인을 피하기 위해 일정 기간 쿠키가 발행됨을 의미합니다. 해당 쿠키는 request.session에 보관됩니다.

그럼 그냥 요청 가져 오거나 포스트 기능을 사용하면 단지 auth 인수를 제공 내에 인증을 사용하려면

+0

나는 Mechanize를 사용하여 작동하지만 인증을 시도하지는 않았다. 틀릴 수도 있다는 것을 알고 있습니까? ** 편집 ** 죄송합니다. 실제로 작동했습니다. 방금 오타를 만들었습니다. –

+0

당신은 생명의 은인입니다. 나는 하루 종일 coldfusion 쓰레기를 걸어 다닐 줄 알았는데.수동 다운로드 8 시간을 수행하는 데 15 분의 시간이 소요되었습니다. – Blairg23

+0

그럼 파일을 함께 보내려면 어떻게해야합니까? –

12

... 등 페이지를 검색 할 수 session.get(someurl, ...)를 사용합니다. 이와 같이 :

response = requests.get(url, auth = ('username', 'password')) 자세한 내용은 Authentication Documentation 요청을 참조하십시오.

크롬의 개발자 도구를 사용하면 작성하고 제출할 양식이 포함 된 HTML 페이지의 요소를 검사 할 수 있습니다. 이것이 어떻게 수행되는지에 대한 설명은 here으로 가십시오. 게시 요청의 데이터 인수를 채우기 위해 필요한 데이터를 찾을 수 있습니다. 액세스하고있는 사이트의 보안 인증서를 확인하는 것에 대해 걱정하지 않으려는 경우 get 인수 목록에 지정할 수도 있습니다. 다음과 같이

<textarea id="text" class="wikitext" name="text" cols="80" rows="20"> 
This is where your edited text will go 
</textarea> 
<input type="submit" id="save" name="save" value="Submit changes"> 

그런 다음 파이썬 코드가이 양식에 게시하는 것입니다 :

import requests 
from bs4 import BeautifulSoup 

url = "http://www.someurl.com" 

username = "your_username" 
password = "your_password" 

response = requests.get(url, auth=(username, password), verify=False) 

# Getting the text of the page from the response data  
page = BeautifulSoup(response.text) 

# Finding the text contained in a specific element, for instance, the 
# textarea element that contains the area where you would write a forum post 
txt = page.find('textarea', id="text").string 

# Finding the value of a specific attribute with name = "version" and 
# extracting the contents of the value attribute 
tag = page.find('input', attrs = {'name':'version'}) 
ver = tag['value'] 

# Changing the text to whatever you want 
txt = "Your text here, this will be what is written to the textarea for the post" 

# construct the POST request 
form_data = { 
    'save' : 'Submit changes' 
    'text' : txt 
} 

post = requests.post(url,auth=(username, password),data=form_data,verify=False) 
관련 문제