2017-07-10 75 views
0

我的任务是从网站页面https://www.dobovo.com/获取预订公寓的日历。当页面被加载时,站点本身从json格式的后请求中接收数据。当我发送类似的请求时,我得到以下错误{'success': False, 'error': 'Method GET is not allowed'},尽管我通过post方法发布请求。请求后的Python无法接收json响应

有趣的是,前几天我可以用相同的方式获取数据。 这也是有趣的,我可以从终端获得此JSON:curl -d "id=89740&date=2017-07-01" https://www.dobovo.com/dobovo/apt/ajax.php?action=getCalendar&lang=enwget --post-data="id=82731&date=2017-07-01" https://www.dobovo.com/dobovo/apt/ajax.php?action=getCalendar&lang=en (ID = 82731是一个公寓为例)

我的Python代码:

from requests import post 
def get_calendar(url): 
    ajax = 'http://www.dobovo.com/dobovo/apt/ajax.php?action=getCalendar&lang=en' 
    first_day_in_month = '2017-07-01' 
    id_ = url[-10:-5] 
    form_data = { 
     'id': id_, 
     'date': first_day_in_month 
    } 
    response = post(url=ajax, data=form_data) 
    return response.json() 

网址这里是一个链接带有日历的页面,如https://www.dobovo.com/zaporozhye-apartments/orchid-82731.html

请告诉我,我做错了什么?

+0

看看你的'ajax'变量,该URL甚至不会返回有效的响应 –

+0

@aws_apprentice这是请求的URL。除非您使用数据发送后请求,​​否则它不能返回任何内容。而且这个URL是正确的,因为我从终端发送请求并获得必要的数据。或者我不了解你? –

+0

您必须为此任务使用'requests.Session'。 –

回答

-1

根据sigmavirus24's answer,POST请求仅在发生重定向时更改为GET。似乎dobovo.com只适用于https,所以请在您的ajax变量中将'http'更改为'https',您将会好起来。