curl模拟带登录信息的请求(需要登录获取cookie)

curl作为接口测试的一种方法,可以快速的在命令行下测试接口,他比postman来的更快。无需开启界面,有时候在生产环境linux服务器上,为了检验一个接口是否可以正常返回,我们通常是通过curl,这时候是不方便使用postman或者jmeter等工具的。一般get,post等请求可以很方便的模拟。但是遇到登录需要验证用户信息的,这时候需要做一些调整。

需要用户登录,我们可以通过直接调用登录接口,然后查看他返回的cookie信息,然后在接下来的请求中,带上cookie就可以正常访问后面的接口了。如下所示:

C:\Users\Administrator>curl http://localhost:8080/user/user-info

C:\Users\Administrator>curl -d "username=admin&password=123456" -v 
http://127.0.0.1:8080/user/login
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> POST /user/login HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.45.0
> Accept: */*
> Content-Length: 30
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 30 out of 30 bytes
< HTTP/1.1 302
< Set-Cookie: JSESSIONID=50e25434-03f7-41f7-960c-c2773666d49a; Path=/; HttpOnly
< Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Wed, 09-Jan-2019 06:16:43 GMT
< Location: http://127.0.0.1:8080/admin;JSESSIONID=50e25434-03f7-41f7-960c-c2773666d49a
< Content-Language: zh-CN
< Content-Length: 0
< Date: Thu, 10 Jan 2019 06:16:43 GMT
<
* Connection #0 to host 127.0.0.1 left intact

C:\Users\Administrator>curl --cookie "JSESSIONID=50e25434-03f7-41f7-960c-c2773666d49a" 
http://127.0.0.1:8080/
user/user-info
{"id":1,"username":"admin","password":"123456","age":20,"mobile":"15011186301","roles":null}
C:\Users\Administrator>

这里默认请求/usr/user-info接口,我们得不到任何信息,因为他需要用户登录,而只有登录了,才能拿到用户的cookie,这样,我们带上cookie,后台接口就知道用户登录过,就会返回正确的数据给请求了。 

在模拟用户登录的接口中,我们加入了-v参数,就会打印请求和相应的具体信息,这样我们可以看到服务端设置的cookie。

 

要通过 PHP 模拟登录获取 Cookie 信息,您需要使用 CURL 库来发送 HTTP 请求并处理响应。以下是一个基本的示例: ```php $username = "your_username"; $password = "your_password"; // 登录页面 URL $login_url = "https://example.com/login.php"; // 设置 CURL 选项 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $login_url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, "username=$username&password=$password"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // 发送登录请求获取响应 $response = curl_exec($curl); // 获取 Cookie 信息 preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $response, $matches); $cookies = array(); foreach($matches[1] as $item) { parse_str($item, $cookie); $cookies = array_merge($cookies, $cookie); } // 输出 Cookie 信息 print_r($cookies); // 关闭 CURL curl_close($curl); ``` 在上面的代码中,您需要将 `$username` 和 `$password` 替换为您的用户名和密码,将 `$login_url` 替换为登录页面的 URL。然后,使用 CURL 发送 POST 请求,将用户名和密码作为参数传递。设置 `CURLOPT_RETURNTRANSFER` 选项以获取响应内容,设置 `CURLOPT_FOLLOWLOCATION` 选项以跟随重定向。最后,使用正则表达式从响应头中提取 Cookie 信息,并将其存储在 `$cookies` 数组中。最后,您可以使用 `print_r()` 函数输出 Cookie 信息。 请注意,上面的示例仅适用于基本的 HTTP 认证,如果您的网站使用了更复杂的认证方式(如 OAuth、JWT 等),则需要进行更高级的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值