2014-09-21 75 views
0

我想连接一个似乎在Ajax中的网站。我想要获取的html页面与着陆页的URL相同,只是登录后才会更改。 这里是我的代码:Python:使用请求登录到ajax网站

URL = 'http://www.pogdesign.co.uk/cat/' 
payload = {' password': 'password', ' sub_login': 'Account Login', 'username': 'email'} 

with requests.Session() as s: 
    s.post(URL, data=payload) 
    sock = urllib.urlopen(URL) 
    psource = sock.read() 

页我得到的是“不是在登录页”。我怀疑我可能已经忘记了关于标题的一些东西,或者这不是ajax的工作原理。

感谢您的帮助!

Anton

+0

您确定'requests.Session()。post()'有效吗?我认为这只是'requests.post' – karthikr 2014-09-21 22:50:52

+0

它似乎正在工作,因为我的脚本让我返回一个HTML页面,只是不是登录的。 – Anton 2014-09-22 12:09:28

回答

0

你可以发布您的登录与session.post但随后试图读取页面登录与urlliburllib没有关于您的登录数据(例如会话cookie)的任何信息,除非您明确提供它。当你发布时,你没有捕获到回应。即使您不需要,也可以继续使用会话再次请求登录页面。

response = s.post(URL, data=payload) 
# response holds the HTTP status, cookie data and possibly the "logged in page" html. 
# check `response.text` if that's the case. if it's only the authentication cookie... 
logged_in_page = s.get(URL) 

当你使用同一个会话做s.get(),登录时,你有饼干重新发送后续请求。因为它是AJAX,您需要检查时,通过浏览器完成正在发送哪些额外的数据,标题或饼干(以及它是否是getpost检索后续页。)

对于登录post()登录数据可以作为params发送,张贴dataheaders。检查您的浏览器正在发生哪种情况(使用开发工具 - > Firefox或Chrome中的“网络”)。

此外,不要在会话中使用with上下文,因为只要退出该代码块,它就会结束会话。您可能希望您的会话s持续时间长于登录,因为它正在管理您的Cookie等。

+0

感谢您的回答。我以前使用过.get,但它不起作用。以下是帖子中的萤火虫信息:http://hpics.li/d3955b0。我不知道我是否必须像图片中那样通过所有的头发和饼干。我似乎无法找到哪个get或post方法在登录后刷新页面... – Anton 2014-09-22 12:19:51

+0

我找到了一个使用标题和获取刷新页面的解决方案,谢谢! – Anton 2014-09-22 14:07:52

+0

很高兴它解决了。顺便说一句,奇怪的是,响应代码为302成功登录。也许是一个新的登录后页面。 – aneroid 2014-09-22 15:47:19

0

它看起来不像您发送的实际登录请求。尝试类似于:

URL = 'http://www.pogdesign.co.uk/cat/' 
LOGIN_URL = 'http://www.pogdesign.co.uk/login/' # Or whatever the login request url is 
payload = {' password': 'password', ' sub_login': 'Account Login', 'username': 'email'} 

s = requests.Session() 
s.post(LOGIN_URL, data=payload) 
s.get(URL) 
s.content 
# >> your /cat/ content 

关于Session的好处是,它会默认携带您的Cookie,因此一旦会话通过身份验证,它将继续工作。我在https://github.com/BWStearns/WhiteTruffleScraper的例子中使用了会话登录。

您可以通过观看开发工具业务,并在登录发现登录请求URL。

+0

感谢您的回答。问题是登录URL与着陆URL和我想要得到的URL相同,只是通过ajax刷新。这里是萤火虫日志(http://hpics.li/d3955b0)。 – Anton 2014-09-22 12:22:46

+0

啊,对不起。我看到/ cat /,并认为它是[foo | bar]类型的URL,并没有看到该网站本身。 – BWStearns 2014-09-22 17:55:03

+1

不用担心,很有道理! – Anton 2014-09-23 07:36:18