使用浏览器的XHR日志重新创建AJAX请求

时间:2014-10-30 23:50:53

标签: ajax xmlhttprequest python-requests

我想完全根据Chrome检查器(网络标签页)中显示的XHR数据创建一个发布请求。目标是重新创建一个AJAX请求,转到动态显示的第4页。

我正在编程:

from requests import Session
session = requests.Session()

session.head('http://www.metrocuadrado.com/web/buscarFiltros/bogota-apartamento-venta')

payload = {...}   #copied and pasted literally from the (previously inspected) source code of the XHR request
headersxhr = {...}   #dictionary of all the headers found in the (previously inspected) source code of the XHR

response = session.post(
    url = 'http://www.metrocuadrado.com/web/busqueda/pagina-4',
    data = payload,    
    headers = headersxhr
    )

print response.text

不幸的是,这给了我404错误。粘贴的有效负载很长,有很多嵌套的字典。它是这样开始的:

{“token”:“”,“cantidadResultadosPagina”:“16”,“filtrosJson”:“\ t \ t \ n \ t \ t {\”mnombreinmobiliaria \“:{\”nombre \“ :\“mnombreinmobiliaria \”,\“valor \”:[\“\”],\“valor2 \”:null,\“descripcion \”:\“NombreCompañia\”,\“tip #。 ....等等

我应该注意一个编码问题吗?
另外,我是否必须通过所有标题?

非常感谢!!

1 个答案:

答案 0 :(得分:0)

1)filtrosJson是随机生成的代码。这可以在第一页的源代码中找到。

我们首先需要使用您喜欢的任何方法来获取它,现在我正在使用bs4

2)有效负载在json中,因此我们必须使用json.dumps发送post请求。 最后发送帖子请求,指出Content-Typeapplication/json

我们可以做这样的事情,

import requests, json
from bs4 import BeautifulSoup as bs

s=requests.Session()
headers={"User-Agent":"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"}
s.headers.update(headers)

r=s.get("http://www.metrocuadrado.com/web/buscarFiltros/bogota-apartamento-venta")

soup=bs(r.content)
filtrosJson=soup.find(id="filtrosJson").text
data={"cantidadResultadosPagina": "16","filtroOrdenamiento": "-1","filtrosJson":filtrosJson,"token": ""}


r=s.post("http://www.metrocuadrado.com/web/busqueda/pagina-4",data=json.dumps(data),headers={"X-Requested-With":"XMLHttpRequest","Content-Type":"application/json"})

print r.json()

这适用于Python2.7,Ubuntu 14.04

如果您遇到任何问题,请告诉我们: - )