从Broswer对HTML站点上的JSON API进行POST请求

时间:2018-01-09 15:10:35

标签: javascript python html json http

我尝试使用ajax查询超市的搜索API,并使用名称,价格和单位定价进行回复。要使用Python请求执行此操作,我将使用此代码:

import requests
import json

payload ={
   'Filters':'[]',
   'IsSpecial':'false',
   'Location':'/shop/search/products?searchTerm=banana',
   'PageNumber':'1',
   'PageSize':'24',
   'SearchTerm':'banana',
   'SortType':'TraderRelevance'
}

url = "https://www.woolworths.com.au/apis/ui/Search/products"

data = requests.post(url, json=payload).json()

print(data['Products'][0]['Name'])
print("$", data['Products'][0]['Products'][0]['Price'], "0", sep='')
print(data['Products'][0]['Products'][0]['CupString'])
print()

print(data['Products'][1]['Name'])
print("$", data['Products'][1]['Products'][0]['Price'], "0", sep='')
print(data['Products'][1]['Products'][0]['CupString'])
print()

print(data['Products'][2]['Name'])
print("$", data['Products'][0]['Products'][2]['Price'], "0", sep='')
print(data['Products'][0]['Products'][2]['CupString'])
print()

等等......

我想要做的是将这个python代码复制到可以在Web浏览器中使用的东西。那是可能的吗?

1 个答案:

答案 0 :(得分:0)

浏览器中的语法几乎完全相同,但当然是JavaScript,而不是Python。

您可以使用request-promise NPM module

const request = require('request-promise')

let url = "https://www.woolworths.com.au/apis/ui/Search/products"
let payload = {
  'Filters': '[]',
  'IsSpecial': 'false',
  'Location': '/shop/search/products?searchTerm=banana',
  'PageNumber': '1',
  'PageSize': '24',
  'SearchTerm': 'banana',
  'SortType': 'TraderRelevance'
}

request
    .post({
      url,
      json: payload,
      headers: {'Content-Type': 'application/json'}
    })
    .then(res => console.log(res))
    .catch(err => console.log(err))

您需要在then方法中打印或解析数据,因为JavaScript是异步执行的,而不是像Python那样同步执行。

如何在浏览器中包含JavaScript模块的问题是另一个问题,但您可以在this site和Google上找到大量示例。

此时还有fetch API具有良好的浏览器支持,并且不需要您引入外部模块。语法非常相似,您可以在MDN here上阅读更多内容。