2017-10-13 69 views
0

我一直在努力和研究很辛苦,但我还没有找到答案。cURL到PHP与标题和用户名,但没有密码

我得到了以下卷曲:

curl "https://someurl" -H "client-id: Fsomemorecharacters8=" -u "8somemorecharacters0:" 

测试在命令shell完美的作品。 但是,我怎样才能使它与PHP一起工作? 通常它的“用户名:密码”,但我得到了“用户名:”这很奇怪。

我的PHP代码至今:

<?php 
    $ch = curl_init(); 
    $url = 'https://someurl'; 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, array('client-id: FHP20c+somemorecharacters8=')); 
    curl_setopt($ch, CURLOPT_USERPWD, '85a15somemorecharacters4550:'); //Issue is here i think 

    $output = curl_exec($ch); 

    curl_close($ch); 
?> 

你有任何想法如何使工作给予-U“用户名”,而不是-U“用户名:密码”?

问候

UPDATE
的回答,请参阅下文!

+1

是' '85a15somemorecharacters4550:' 末端的空间'一个错字?这将发送一个空格作为密码。 – iainn

+0

感谢您的回答@iainn。 对不起,这是一个错字。我相应地编辑了我的帖子。 – TrojanRabbit

回答

0

所以我终于能够解决它。

  1. 由于print curl_error($ch);$output = curl_exec($ch);之后我发现有一个“SSL证书问题:自签名证书中的链证书”。
  2. 因此,我需要下载证书并将其包含在请求中,如下所示:curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert-2017-09-20.pem");或者您可以使用curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);,但不建议这样做。
  3. 感谢回复$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);我发现我的标题丢失了。我需要使用CURLOPT_HTTPHEADER而不是CURLOPT_HEADER

因此,这里是我的全码:

<?php 

    $ch = curl_init(); 
    $url = 'https://someurl'; 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert-2017-09-20.pem"); 
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('client-id: client-id: FHP20c+somemorecharacters8=')); 
    curl_setopt($ch, CURLOPT_USERPWD, '885a15somemorecharacters4550:'); 

    $output = curl_exec($ch); 
    print curl_error($ch); 
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    curl_close($ch); 

    file_put_contents('output.txt', $output); 

    echo '<br><b>Output</b><br>' . $output; 
    echo '<br><b>Status-Code</b><br>' . $status_code; 
?>