2017-01-30 15 views
2

私は(アクセス権を持っている)良い取り組んでいるのPythonのコードを次ていますPHPでcURLと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 

感謝を。

答えて

1

私はあなたがcurl_setopt($ch, CURLOPT_POST, 1);の代わりcurl_setopt($ch, CURLOPT_POST, 0);によってHTTP POSTを有効にする必要があり

$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

これは試してみてください。不正な401エラーが発生しています。同一のコマンドラインcURLがうまく動作する(なぜなら、同じユーザ/パスに対して)理由がわからないからです。 – Joe

+0

Postvarsを送信する代わりにCURLOPT_USERPWDを使用するように編集しました。試してみて、結果を教えてください。 – Kaylined

+0

再度改訂。上記のように試してみてください。 – Kaylined

0

(私の以前のソリューションへのあなたのコメントに基づいて)あなたはCURLOPT_USERPWDを使用して、代わりにこの特定のユースケースのためpostvarsを提出しなければならないと考えていますPOSTを使用している場合。私も「1」フラグをしようと、動作しませんでした(0が最後のテストからちょうど残り物だった) - うん

$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未承認 同じユーザー/パスと正確に同じURLの通常のcURLが正常に動作するのはなぜですか? – 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"; 
関連する問題