У меня есть следующий код в Python, который работает хорошо (есть доступ):
import requests
username = 'user'
password = 'pass'
r = requests.get('https://internalwebsite/list', auth=(username, password))
j = r.json()
Как мне написать это на PHP?
Я пытался подобным образом, но пока безуспешно:
$postvars = "username=user&password=pass";
$url = "https://internalwebsite/list";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST, 1); //0 for a get request
curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
print "curl response is:" . $response;
curl_close ($ch);
Обычная команда cURL также хорошо работает (имеет ответ):
curl -u 'user:pass' https://internalwebsite/list
Благодарю.
Я считаю, что вы должны использовать CURLOPT_USERPWD вместо того, чтобы отправлять postvars для этого конкретного случая использования (на основе вашего комментария к моему предыдущему решению)
$url = "https://internalwebsite/list";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_USERPWD, "myusername:mypassword");
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
print "curl response is:" . $response;
curl_close ($ch);
Вам нужно включить HTTP POST
от curl_setopt($ch, CURLOPT_POST, 1);
вместо curl_setopt($ch, CURLOPT_POST, 0);
если вы используете POST. Попробуй это
$username = 'user';
$password = 'pass';
$url = 'https://internalwebsite/list';
//init curl
$ch = curl_init();
//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $url);
// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);
//Set the post parameters
curl_setopt($ch, CURLOPT_POSTFIELDS, 'user=' . $username . '&pass=' . $password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
print "curl response is:" . $response;
curl_close($ch);
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, ( $url . '?' . $postvars ) );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$response = curl_exec($ch);
curl_close($ch);
echo "response is $response";