2017-01-30 4 views
2

я следующий код в Python, который работает хорошо (есть доступ):Как реплицировать библиотеку запросов cURL и python в PHP?

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); 

Regular команда Curl работает хорошо, как хорошо (есть ответ):

curl -u 'user:pass' https://internalwebsite/list 

Спасибо.

ответ

1

Я считаю, что вы должны использовать 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); 
+0

Да - я попробовал с флагом «1», а также и не работал (0 просто пережиток прошлого теста). Я получаю несанкционированную ошибку 401. Не уверен, почему, поскольку из той же командной строки cURL отлично работает (для того же пользователя/прохода). – Joe

+0

Отредактировал его, чтобы использовать CURLOPT_USERPWD вместо отправки postvars. Попробуйте это, и дайте мне знать результаты. – Kaylined

+0

Снова внесены изменения; попробуйте, как указано выше. – Kaylined

0

Вам необходимо включить 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); 
+0

Продолжайте получать эту ошибку: Ошибка 401 Несанкционированный Почему это должно быть, если регулярная cURL с одним и тем же пользователем/паролем и точно такой же URL-адрес работает нормально? – Joe

0
$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";