import requests,jsonpath params = { "application": "app", "application_client_type": "weixin", } data = { "accounts":"huace_xm", "pwd":"123456", "verify":"rib5", "type":"username" } res = requests.post\ (url="http://shop-xo.hctestedu.com/index.php?s=api/user/login",params=params,data=data) print(res.text) #print(res.json()["data"]["token"]) # 转成json数据 --字典的写法 token_list = jsonpath.jsonpath(res.json(),"$..add_time_text","$..token") print(jsonpath.jsonpath(res.json(),"$..token")) # 前面输入 Json数据 规则 print(token_list) """商品收藏""" facor_data = {"id":"12"} res_facor = requests.post\ (url="http://shop-xo.hctestedu.com/index.php?s=api/goods/favor&token="+token_list[1],params=params,data=facor_data) print(res_facor.text)
时间: 2023-08-27 14:10:58 浏览: 43
这段代码是用 Python 的 requests 库发送 POST 请求,访问了一个名为 "http://shop-xo.hctestedu.com/index.php?s=api/user/login" 的 API 接口,传递了一些参数和数据,然后获取了响应结果。接下来对响应结果进行了解析,提取了其中的 token 字段,然后将 token 作为参数发送了另一个 POST 请求,访问了一个名为 "http://shop-xo.hctestedu.com/index.php?s=api/goods/favor" 的 API 接口,同时传递了一个名为 facor_data 的数据。最后打印了第二个请求的响应结果。
相关问题
import pytest,requests,jsonpath params = { "application": "app", "application_client_type": "weixin", } header ={ "application": "app", "application_client_type": "weixin", "token":"token_list" } data = { "accounts":"huace_xm", "pwd":"123456", "type":"username" } def test_01(): res = requests.post \ (url="http://shop-xo.hctestedu.com/index.php?s=api/user/login", params=params, data=data) print(res.text) # print(res.json()["data"]["token"]) token_list = jsonpath.jsonpath(res.json(), "$..token") print(token_list) # 转成json数据 --字典的写法 def test_02(): data2 = { "id": "12" } res1 = requests.post \ (url="http://shop-xo.hctestedu.com/index.php" "?s=api/goods/favor&token=" + token_list[0], params=params, data=data2) print(res1.text)这个代码报错原因为什么是E NameError: name 'token_list' is not defined
这个代码报错是因为`token_list`变量只在`test_01`函数中被定义,而在`test_02`函数中却没有被定义。因此,当`test_02`函数中的代码尝试使用`token_list`变量时,Python会抛出一个`NameError`异常,提示该变量未被定义。
要解决这个问题,可以将`token_list`变量定义为全局变量,使它在整个程序中都可以被访问。具体来说,可以将其定义在函数外部,例如:
```
import pytest
import requests
import jsonpath
params = {
"application": "app",
"application_client_type": "weixin",
}
header = {
"application": "app",
"application_client_type": "weixin",
"token": "token_list",
}
data = {
"accounts": "huace_xm",
"pwd": "123456",
"type": "username",
}
# 定义全局变量
token_list = []
def test_01():
global token_list # 声明使用全局变量
res = requests.post(
url="http://shop-xo.hctestedu.com/index.php?s=api/user/login",
params=params,
data=data
)
print(res.text)
token_list = jsonpath.jsonpath(res.json(), "$..token")
print(token_list)
def test_02():
global token_list # 声明使用全局变量
data2 = {
"id": "12"
}
res1 = requests.post(
url="http://shop-xo.hctestedu.com/index.php?s=api/goods/favor&token=" + token_list[0],
params=params,
data=data2
)
print(res1.text)
```
在这个例子中,我们将`token_list`变量定义为全局变量,并在`test_01`和`test_02`函数中都声明使用全局变量。这样,在`test_01`函数中赋值给`token_list`变量的值就可以在`test_02`函数中使用了。
import requests,jsonpath params = { "application": "app", "application_client_type": "weixin", } data = { "accounts":"huace_xm", "pwd":"123456", "verify":"rib5", "type":"username" } res = requests.post\ (url="http://shop-xo.hctestedu.com/index.php?s=api/user/login",params=params,data=data) print(res.text) #print(res.json()["data"]["token"]) # 转成json数据 --字典的写法 token_list = jsonpath.jsonpath(res.json(),"$..token") print(jsonpath.jsonpath(res.json(),"$..token")) # 前面输入 Json数据 规则 print(token_list) """商品收藏""" facor_data = {"id":"12"} res_facor = requests.post\ (url="http://shop-xo.hctestedu.com/index.php?s=api/goods/favor&token="+token_list[0],params=params,data=facor_data) print(res_facor.text)
根据你提供的代码,我猜测你想要模拟登录一个网站,并使用获取到的 token 来收藏某个商品。你使用了 requests 库来发送 POST 请求,其中通过传递 params 和 data 参数来设置 URL 中的查询参数和请求体中的表单数据。对于返回的响应,你使用了 jsonpath 库来从 JSON 数据中提取 token 字段的值,并使用该值来构建新的请求 URL。
不过,我注意到你的代码中有一些问题。首先,你在收藏商品的请求 URL 中直接将 token 作为查询参数传递,这可能会导致泄露用户的登录信息。更好的做法是将 token 存储在请求头中,例如:
```
headers = {
"Authorization": "Bearer " + token_list[0]
}
res_facor = requests.post(
url="http://shop-xo.hctestedu.com/index.php?s=api/goods/favor",
params=params,
data=facor_data,
headers=headers
)
```
此外,你的代码中还有一些细节需要注意。例如,你可能需要对响应进行异常处理,以避免出现网络错误或无效的响应。另外,你应该仔细检查 API 文档,以确保你的请求参数和响应数据格式正确。