2

自分のアプリケーションからサーバーとそのデータにアクセスしようとしています。ログインするには、ユーザー名とパスワードに加えて、私が持っている証明書が必要です。私の問題は、401 を取得し続けるため、明らかにこの情報を間違って送信していることです。このページで、ログイン後にこのサーバーから HAL+JSON データを取得できるはずです。前のページからフィールドがポストされ、それをサーバーに送信してデータを取得する必要があります。

これが私のコードです:

$username = 'foo';
$password = 'bar';
$auth_token = $username . '-' . $password;

$url = 'https://data.service.com'.$_POST['url'].'?callback=?';
$ch = curl_init($url); 
/* Upon receiving the right certificate 
*  I should have a cookie with this information. 
*/
$data_string = array('cert_url' => 'https://data.service.com/cert/2364o872ogfglsgw8ogiblsjy');    
/* That hash at the end corresponds to the Public Key ID 
*  in the certificate. No idea how to retrieve this, 
*  or if I need to do it to login
*/
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);      
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HEADER, true);     
curl_setopt($ch, CURLOPT_HTTPHEADER, array(   
      'Accept: application/javascript',
      'Access-Control-Allow-Origin: *',                                                                       
      'Content-Type: application/javascript',
      "Authorization: Basic " . base64_encode($username.":".$password)
   ));  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);  
curl_setopt($ch, CURLOPT_FAILONERROR, true);  
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);    
curl_setopt($ch, CURLOPT_VERBOSE, true);                                                                                                            
$result = curl_exec($ch);  
if(curl_exec($ch) === false){
      echo 'Curl error: ' . curl_error($ch);
      print_r(error_get_last());
} else {
      echo 'Operation completed without any errors';
curl_close($ch);
$response = json_decode($result, true); ?>
4

1 に答える 1

1

http://www.php.net/manual/ru/function.curl-setopt.php#98164をご覧ください。

使わないようにしよう

"Authorization: Basic " . base64_encode($username.":".$password)

または、カールに認証方法を選択させて、試してください

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

curl がリモート サーバーの ssl 証明書を気に入らなかった場合は、次を試してください。

curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER , false ); 
curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST , false );

PS あなたのケースでは CURLOPT_RETURNTRANSFER が false であるべきだと確信していますか?

于 2013-04-04T07:47:41.997 に答える