2012-10-30 34 views
16

This Kullanmaya çalıştığım modüldür ve otomatik olarak doldurmaya çalıştığım bir form var. İstekleri Mekanizme Göre Kullanmak İstediğim Sebebi, Mekanizması ile, doldurup gönderebilmemiz için önce giriş sayfasını yüklemem gerekiyor, İstekler ile, yükleme aşamasını atlayabilir ve doğrudan mesajı göndermeye başlayabilirim. (inşallah). Temel olarak, giriş işleminin mümkün olduğunca az bant genişliği tüketmesini sağlamaya çalışıyorum.Python İstekleri modülünü kullanarak HTTP posta isteği nasıl taklit edilir?

İkinci sorum, giriş işleminden ve yeniden yönlendirmeden sonra, tüm sayfayı tam olarak karşıdan yüklemek değil, yalnızca sayfa başlığını almak mümkün mü? Temel olarak, başlık yalnızca girişin başarılı olup olmadığını söyleyecektir, dolayısıyla bant genişliği kullanımını en aza indirmek istiyorum.

Bu, HTTP istekleri ve neyin söz konusu olduğu konusunda bir kötüyüm, bu nedenle herhangi bir yardım takdir edilecektir. FYI, bu bir okul projesi için.

düzenleme Sorunun ilk kısmı yanıtlandı. Sorum şu anda ikinci bölümü için ise

+1

Chrome'u kullanabilirsiniz html sayfanız bu öğeleri vardır

Eğer web formu gönderme için kullanmak Müfettiş, tarayıcı tarafından oluşturulan posta isteğine hangi değerlerin geçtiğini görmek ve ardından oradan gitmek. – bossylobster

cevap

32

Bazı örnek kod:

ilk adım kaynak sayfa bakıp (kullanım Kundakçı/Krom/IE araçları teslim ediliyor form unsurları tespit etmektir
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 

ne olursa olsun (ya da sadece kaynağa bakarak)). Ardından input öğelerini bulun ve gerekli name özniteliklerini tanımlayın (yukarıya bakın).

Sağladığınız URL, denemediğim halde (hatırlayamadığım halde), daha fazla giriş yapmamak için bir süre için bir çerezi yayınlayacağını ima eden bir "Beni Hatırla" a sahip olur - Bu çerezler request.session'da tutulur.

Sonra sadece bir istek olsun veya post fonksiyonu sadece auth argüman tedarik dahilinde kimlik kullanmak için

+0

Bunu denedim, ancak Mechanize kullanarak çalışmasına rağmen, beni doğrulamak gibi görünmüyordu. Yanlış olabileceğini biliyor musun? ** edit ** Üzgünüm, aslında işe yaradı. Sadece bir yazım hatası yaptım :) –

+0

Sen bir hayat kurtarıcısın. Bütün gün boyunca soğuk hava kremi geçirmem gerektiğini düşündüm.8 saatlik manuel indirme yapmak için 15 dakika sürdü! – Blairg23

+0

nasıl dosya gönderirim? –

12

... vb sayfalarını için session.get(someurl, ...) kullanın. Bunun gibi:

response = requests.get(url, auth = ('username', 'password')) Daha ayrıntılı bilgi için Authentication Documentation Taleplerine başvurun.

Chrome'un geliştirici araçlarını kullanarak, doldurmak ve göndermek istediğiniz formu içeren html sayfanızın öğelerini inceleyebilirsiniz. Bunun nasıl yapıldığının açıklaması için here. Gönderi isteğinizin veri argümanını doldurmanız için gereken verileri bulabilirsiniz. Eriştiğiniz sitenin güvenlik sertifikasının doğrulanması konusunda endişelenmiyorsanız, get argüman listesinden bunu belirtebilirsiniz. aşağıdaki gibi

<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"> 

Sonra piton kod, bu forma göndermektir:

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) 
İlgili konular