我是PHP(Laravel)的新手,得到了一些项目。下面是解释:
- 一个设备存在于某个地方,它收集一些数据。
- 我的项目需要登录设备,需要通过JSON文件获取数据。
我使用了下面的代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$url.0.json");
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$response = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
$code = -1;
if (!$errno) $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
返回302 found error,所以我添加了这行代码:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
之后,我得到了200个代码,但响应是登录页面的HTML代码。(JSON)
当我在浏览器中复制粘贴URL("$ URL .0.json")时,它会重定向到登录页面
我认为登录不能成功。
请给我一些建议。我提前感谢你
如果你正在使用Laravel,不要使用Curl。假设你使用的是Laravel 7或更高版本,你可以使用Laravel HTTP客户端。这比Curl简单多了。
Laravel Docs: https://laravel.com/docs/8.x/http-client
use IlluminateSupportFacadesHttp;
$response = Http::withBasicAuth($username, $password)->get($url);
如果您使用的是早期版本的Laravel,请使用Guzzle HTTP Client。
Guzzle Docs: https://docs.guzzlephp.org/en/stable/quickstart.html
use GuzzleHttpClient;
$client = new Client;
$response = $client->request('GET', $url, ['auth' => [$username, $password']]);