Yêu cầu thg 3 20, 2019 7:01 CH 545 0 2
  • 545 0 2
0

cURL php không gửi được request thứ 2 sau khi request login thành công

Chia sẻ
  • 545 0 2

Mình có dùng cURL để làm gửi request đến 1 url có bắt login. Hàm login thì mình đã gửi request thành công và login vào được, nhưng vấn đề là khi chạy đến request tiếp theo thì nó không còn cái login đấy nữa. Mọi người cho mình xin keyword để làm phần này hoặc chỉ mình cách fix với.

Login

function login()
{
	$url = 'LOGIN_LINK';
	$data = [
		'csrf' => 'CSRF',
		'username' => 'USERNAME',
		'password' => '******'
	];
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

	$result = curl_exec($ch);

	var_dump(curl_getinfo($ch));
	curl_close($ch);die;
}

Request thứ 2

function getDetailRequest()
{
	login();

	$url = 'URL_2';
	$data = [
		'id' => '1',
	];
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

	$result = curl_exec($ch);
	var_dump(curl_getinfo($ch));
	curl_close($ch);
}

2 CÂU TRẢ LỜI


Đã trả lời thg 3 21, 2019 1:19 SA
Đã được chấp nhận
+3

Mình đoán trường hợp của bạn, cái một trong 2 API của bạn nó là stateless API không có session. Do đó 2 request của bạn sẽ độc lập với nhau và không có căn cứ nào để server nó biết được là bạn đã đăng nhập ở request sau.

  1. Nếu API login trả về không trả về accessToken, khả năng nó đang dùng session còn cái API thứ 2 nó là stateless chỉ dùng accessToken hoặc apiKey nên session sẽ bị vô tác dụng. Do đó request thứ 2 cho rằng bạn chưa đăng nhập.
  2. Ngược lại thì API login có thể là stateless. Nếu giả định của mình đúng thì thường người ta sẽ cho response trả về chứa accessToken hoặc apiKey hoặc cái gì khác... để chứng mình rằng bạn đã đăng nhập. Bạn chỉ cần thêm cái accessToken hoặc apiKey vào header của request thứ 2 (header hay dùng là Authorization phụ thuộc vào server dùng như nào).

Ngoài ra, nếu cả hai request đều dùng session để chứng minh bạn đã đăng nhập, thì ở request thứ 2, bạn cần gửi thêm cookie lên kèm. Cookie là bằng chứng đề server biết rằng bạn đã đăng nhập.

Chia sẻ
Đã trả lời thg 7 24, 2019 11:52 CH
0

Ở request 1 lưu lại cookie đăng nhập thành công Và request thứ 2 load cookie vào là ok

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí