2016-07-07 10 views
0

私は、curlを使ってPOSTメソッドを提出しなければなりませんが、$ URLを開くときには、ユーザー名/パスワード(htpasswdのような)を持つポップアップウィンドウがあります。次のコードは動作していないいくつかの理由 PHP - カール、htpasswdのポップアップでユーザー名のパスワードを送信する方法?

iは

// For Debug server response details 
$curlOptions = array(
    CURLOPT_RETURNTRANSFER => TRUE, 
    CURLOPT_FOLLOWLOCATION => TRUE, 
    CURLOPT_VERBOSE => TRUE, 
    CURLOPT_STDERR => $verbose = fopen('php://temp', 'rw+'), 
    CURLOPT_FILETIME => TRUE, 
); 

// Real meat 
$ch = curl_init(); 
curl_setopt_array($ch, $curlOptions); 
curl_setopt($ch, CURLOPT_URL,$URL); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

// is this the right way here in POST method??? 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");// is this correct way to enter username/password in the popup? 

$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
$result=curl_exec ($ch); 

// Pretty print the debug logs 
echo '<pre>', 
     !rewind($verbose), 
     stream_get_contents($verbose), 
     "\n", 
    '</pre>'; 

curl_close ($ch); 
echo $result; 

がどのように私は私のPOSTメソッドの提出が本当にユーザー名/パスワードを提出していることを確認することができ、サーバ

HTTP/1.1 401 Unauthorized and HTTP/1.1 404 Not Foundhttps://www.httpwatch.com/httpgallery/authentication/)から入手しますか? (私が正しく提出した場合、私は見ていないデバッグログ、サーバは、そのサードパーティのサービスプロバイダのAPIとして、私が維持されていない)

EDIT:

TRY1:

// For Debug server response details 
$curlOptions = array(
    CURLOPT_RETURNTRANSFER => TRUE, 
    CURLOPT_FOLLOWLOCATION => TRUE, 
    CURLOPT_VERBOSE => TRUE, 
    CURLOPT_STDERR => $verbose = fopen('php://temp', 'rw+'), 
    CURLOPT_FILETIME => TRUE, 
); 

// Real meat 
$ch = curl_init(); 
curl_setopt_array($ch, $curlOptions); 


// 
// 
// 
// 
// STACK-OVERFLOW EXPERT SAID UPDATE THE $URL WITH USER:[email protected] THIS 
// 
// 
// 
//  

$URL = "http://$username:[email protected]/postblabla"; 
curl_setopt($ch, CURLOPT_URL, $URL); 



curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 


// 
// 
// 
// 
// STACK-OVERFLOW EXPERT SAID REMOVE THIS 
// 
// 
// 
//  
//curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 

$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
$result=curl_exec ($ch); 

// Pretty print the debug logs 
echo '<pre>', 
     !rewind($verbose), 
     stream_get_contents($verbose), 
     "\n", 
    '</pre>'; 

curl_close ($ch); 
echo $result; 
をFAILED HTTP認証で

答えて

1

は、あなたがURLの一部としてユーザ名とパスワードを送信します。

<schema>://<username>:<password>@<url> 

またthis SO question and answerを参照してください。

しかし、CURLOPT_USERPWDは両方の方法がHTTP Authorizationヘッダーを設定するだけでなく動作しているはずです。 as mentioned here。これはsaferで、資格情報はURLの平文として転送されず、SSL/TLSを使用する可能性があるため、公開時には表示されません。

また、HTTP Basic authを設定すると役立つ場合があります。

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
+0

私のコードではこの行を削除する必要がありますか? 'curl_setopt($ ch、CURLOPT_USERPWD、" $ username:$ password ");' $ URLに '$ username:$ password @ $ real_url'を追加する必要がありますか? – YumYumYum

+0

@ YumYumYum。 – Finwe

+0

私のオリジナルコードと推奨コード。それでもまったく同じ結果を出す。私の上記のEDITセクションを参照してください。 – YumYumYum

関連する問題