1

だからこれは私がこれまでに持っているものです:

self::$connection = curl_init();
curl_setopt(self::$connection, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt(self::$connection, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt(self::$connection, CURLOPT_URL, $url);

curl_exec(self::$connection); // Do a request that uses Basic Auth
curl_setopt(self::$connection, CURLOPT_HTTPAUTH, false); // <-- Not working as expected - I want to disable Basic Auth here
curl_setopt(self::$connection, CURLOPT_URL, $anotherURL);
curl_exec(self::$connection); // <-- Not working as expected - I want to do a request that does NOT use Basic Auth.

したがって、CURLOPT_HTTPAUTHオプションをCURLAUTH_BASICに初期化した場合、それを無効にするにはどうすればよいですか?

永続的なHTTP接続を確立するには、同じハンドル(つまり、self :: $ connection)を使用する必要があります。

4

3 に答える 3

2

それが誰かを助けるなら、これは私がやったことです:

if ($enableBasicAuth){
    self::$httpHeaders['Authorization'] = 'Basic '.base64_encode("$username:$password");    
}
else if (isset(self::$httpHeaders['Authorization'])){
    unset(self::$httpHeaders['Authorization']);    // Disable Basic Auth
}

// Convert the $httpHeaders array into a format that is used by CURLOPT_HTTPHEADER
$httpHeadersRaw = array();
foreach (self::$httpHeaders as $header=>$value){
    $httpHeadersRaw[] = $header.': '.$value;
}
curl_setopt(self::$connection, CURLOPT_HTTPHEADER, $httpHeadersRaw); // Set the HTTP Basic Auth header manually

基本的に、CURLOPT_HTTPHEADER オプションを使用して手動で基本認証を有効/無効にするだけです。

于 2012-06-24T01:07:29.667 に答える
0

もう一度何も設定しないでください...

curl_setopt(self::$connection, CURLOPT_HTTPAUTH, 0);

これはビットマスクであり、0 はどのビットも設定しません...

これが連続した要求である場合は、ユーザー/パスワードをリセットすることもできます。

curl_setopt(self::$connection, CURLOPT_USERPWD, ''); 
于 2012-06-23T23:06:18.577 に答える
0

Baseer が説明したように、秘訣は、決して依存してはならずcurl_setopt_array()、常にオプションの配列全体を直接 on に設定するCURLOPT_HTTPHEADERことcurl_setopt()です。その後、基本認証を削除する場合は、ヘッダーから「Authorization」行を削除するだけです。

わかりやすい例を次に示します。

<?php
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, 'http://example.com');

// Do a request with basic authentication.
$headers = [
  'Accept: */*',
  'Authorization: Basic ' . base64_encode('username:password'),
];
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
curl_exec($handle);

// Do a subsequent request without basic authentication.
$headers = [
  'Accept: */*',
];
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
curl_exec($handle);
?>
于 2015-04-16T18:14:45.053 に答える