使用Python请求库发送jquery AJAX GET请求

4

我需要爬取一个网站,该网站使用jquery AJAX函数从服务器获取信息。我已经调查了一段时间的代码,并成功地使用以下代码从服务器获取响应:

data = {'part_number':'1234'}
r = $.ajax({
        type : 'GET',
        url : 'ajaxurl',
        data : data
    })

请注意,这是通过 js 控制台完成的,所以我已经登录。当我尝试在 Python 中执行此操作时,当然需要先登录:
import requests
headers = {'User-Agent': 'Mozilla/5.0','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
payload = {'username':'me','password':'1234'}
link = 'login url'
session = requests.Session()
resp = session.get(link,headers=headers)
cookies = requests.utils.cookiejar_from_dict(requests.utils.dict_from_cookiejar(session.cookies))
resp = session.post(link,headers=headers,data=payload,cookies =cookies)

#until here sucesss!"############

url = "ajaxurl"
my_params={'part_number':'1234'}
r = session.get( url = url, data = my_params, cookies =cookies,headers =headers )

登录的POST请求成功,但获取GET响应时收到了错误请求400。我无法弄清楚如何格式化我的请求。我不知道ajax对我的请求做了什么。有人有任何想法吗?

提前致谢!


好的,我还有其他东西。当我添加 'X-Requested-With': 'XMLHttpRequest' 后,响应的状态码变为500内部服务器错误,内容是:''使用故障代码“1543”和故障字符串“在处理图表节点“输出2”时发生错误。尝试使用图片子句将数据转换为字符串失败。源字段、无效的源值和图片子句:Root.PW00118O.DOCDATA.PART-FOLDER-ISSUE-PUB,,9(2)。“ - bop
2个回答

7
我解决了!我在头部添加了'X-Requested-With': 'XMLHttpRequest',然后执行了以下操作:
pn = '1234'
r = requests.get(ajaxurl + '?part_number=' + pn, headers=headers, cookies=cookies)

我不明白为什么:(

它告诉服务器你正在通过XMLHttpRequest请求内容,例如AJAX。 - Alex W
有点晚了,但是服务器可以非常容易地过滤掉不是通过AJAX生成的请求(请求类型:xhr)。我想这就是为什么你收到400响应的原因。 - Shivam Sharma

0

BAD REQUEST 400 表示服务器无法理解或处理您通过 AJAX 发送的请求数据。

由于您在 AJAX 中使用了 GET 方法,我建议尝试传统的带查询字符串的 URL:

var request = 'part_number=1234';
$.get('http://your.website/your_server_file?'+request, function(data){
    // handle the server response (data) here ...
});

1
好的,使用jQuery的AJAX请求已经成功了。问题是如何使用Python来模拟它。 - bop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接