2015-10-20 160 views
0

我想使用下面的代码来获得PHP Curl工作: 我拥有使用api的域,并且我可以对正在运行的服务器进行任何更改上。PHP curl error 35对等报告遇到内部错误

<?php 
ini_set('display_errors',1); 
ini_set('display_startup_errors',1); 
error_reporting(-1); 

$data = array("username" => "derped", "authid" => "987654321", "ipaddress" => "1.2.3.4", "apikey" => "1234567829"); 
$data_string = json_encode($data); 
$url = 'https://www.somedomain.com/test/api.php'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: Content-Type: text/html')); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch); 
if(curl_exec($ch) === false) 
{ 
    echo curl_error($ch); 
} 
else 
{ 
    echo 'ok'; 
} 

curl_close($ch); 

$received = json_decode($result); 
$check = $received->{'good'}; 
echo $result; 
echo $check; 
?> 

Curl返回错误:Peer报告它遇到内部错误。 当我卷曲域本身(https://www.somedomain.com)它返回相同的错误。即使当我通过终端使用curl时,它也会返回35错误,但当我试图在不使用HTTPS的情况下卷曲域时,它会返回找到的302,但因为我的域名是https,所以这不是解决方案,它只是回应移动页面。我知道这有些东西用卷曲使用https,但https://www.google.com作品,所以我不知道从哪里开始...

+0

您的证书是否是自签名的?您可能需要将验证器和/或验证主机设置为0 ... –

+0

证书是官方证书(Comodo),我在我的SSL版本中提供了ca。将您的建议添加到它返回的代码后:无法与对等方安全通信:没有常用的加密算法。将检查错误。 – Ecluniam

回答

0

下面是从php.net的答案。显然,这应该有助于解决未知问题的协议...

If you get an error with the error code 35 saying "Unknown SSL protocol error in connection to ...", maybe you are using the wrongs ciphers.

Try to precise a bunch of ciphers as below:

$arrayCiphers = array(
    'DHE-RSA-AES256-SHA', 
    'DHE-DSS-AES256-SHA', 
    'AES256-SHA:KRB5-DES-CBC3-MD5', 
    'KRB5-DES-CBC3-SHA', 
    'EDH-RSA-DES-CBC3-SHA', 
    'EDH-DSS-DES-CBC3-SHA', 
    'DES-CBC3-SHA:DES-CBC3-MD5', 
    'DHE-RSA-AES128-SHA', 
    'DHE-DSS-AES128-SHA', 
    'AES128-SHA:RC2-CBC-MD5', 
    'KRB5-RC4-MD5:KRB5-RC4-SHA', 
    'RC4-SHA:RC4-MD5:RC4-MD5', 
    'KRB5-DES-CBC-MD5', 
    'KRB5-DES-CBC-SHA', 
    'EDH-RSA-DES-CBC-SHA', 
    'EDH-DSS-DES-CBC-SHA:DES-CBC-SHA', 
    'DES-CBC-MD5:EXP-KRB5-RC2-CBC-MD5', 
    'EXP-KRB5-DES-CBC-MD5', 
    'EXP-KRB5-RC2-CBC-SHA', 
    'EXP-KRB5-DES-CBC-SHA', 
    'EXP-EDH-RSA-DES-CBC-SHA', 
    'EXP-EDH-DSS-DES-CBC-SHA', 
    'EXP-DES-CBC-SHA', 
    'EXP-RC2-CBC-MD5', 
    'EXP-RC2-CBC-MD5', 
    'EXP-KRB5-RC4-MD5', 
    'EXP-KRB5-RC4-SHA', 
    'EXP-RC4-MD5:EXP-RC4-MD5'); 
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, implode(':', $arrayCiphers)); 

Worked for me, could work for you! P.S: Used with PHP 5.4 and cURL 7.26.0.

+0

我会尝试匹配我在框中配置的密码顺序,将回传结果。 – Ecluniam

+0

Unfo它返回未知的密码列表;我只是将curl升级到了7.45,认为它可以解决ssl问题,因为我的版本是7.29,但没有雪茄......仍然无法与对等安全地进行通信:没有常见的加密算法错误。因为我只需要发布一个加密数据块,而不是使用curl,fsocket或fopen会成为一个很好的选择。还检查了我的防火墙; 443允许进出 – Ecluniam

+0

您想首先尝试file_get_contents并对API进行简单测试?该功能可以设置为执行POST。 –

0

无法获得卷曲工作,我决定使用的file_get_contents和stream_context_create。

对于那些有兴趣在替代:

客户:

$data = new stdClass(); 
$data->apikey = "1234567890"; 

$json_data = json_encode($data); 

$post = file_get_contents('http://URL/api.php',null,stream_context_create(array(
    'http' => array(
     'method'   => 'POST', 
     'content'   => $json_data, 
    ) 
))); 

if ($post) { 
    echo $post; 
} else { 
    echo "POST failed"; 
} 

API/web服务:

$receive = fopen('php://input', 'r'); 
$received = stream_get_contents($receive); 
$data = json_decode($received); 
$apikey = $data->{'apikey'}; 
If($apikey == 1234567890) 
{ 
    $response = array("good" => true); 
    $goresponse = json_encode($response); 
    print_r($goresponse); 
} 
else 
{ 
    $response = array("good" => false); 
    $goresponse = json_encode($response); 
    print_r($goresponse); 
} 

注意,这些都是基础知识,流将概率。需要更多的参数取决于web服务的限制,祝你好运!

0
$arrayCiphers = array(
    'DHE-RSA-AES256-SHA', 
    'DHE-DSS-AES256-SHA', 
    'AES256-SHA:KRB5-DES-CBC3-MD5', 
    'KRB5-DES-CBC3-SHA', 
    'EDH-RSA-DES-CBC3-SHA', 
    'EDH-DSS-DES-CBC3-SHA', 
    'DES-CBC3-SHA:DES-CBC3-MD5', 
    'DHE-RSA-AES128-SHA', 
    'DHE-DSS-AES128-SHA', 
    'AES128-SHA:RC2-CBC-MD5', 
    'KRB5-RC4-MD5:KRB5-RC4-SHA', 
    'RC4-SHA:RC4-MD5:RC4-MD5', 
    'KRB5-DES-CBC-MD5', 
    'KRB5-DES-CBC-SHA', 
    'EDH-RSA-DES-CBC-SHA', 
    'EDH-DSS-DES-CBC-SHA:DES-CBC-SHA', 
    'DES-CBC-MD5:EXP-KRB5-RC2-CBC-MD5', 
    'EXP-KRB5-DES-CBC-MD5', 
    'EXP-KRB5-RC2-CBC-SHA', 
    'EXP-KRB5-DES-CBC-SHA', 
    'EXP-EDH-RSA-DES-CBC-SHA', 
    'EXP-EDH-DSS-DES-CBC-SHA', 
    'EXP-DES-CBC-SHA', 
    'EXP-RC2-CBC-MD5', 
    'EXP-RC2-CBC-MD5', 
    'EXP-KRB5-RC4-MD5', 
    'EXP-KRB5-RC4-SHA', 
    'EXP-RC4-MD5:EXP-RC4-MD5'); 

curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, implode(':', $arrayCiphers)); 
+2

给你一些关于你的解决方案的解释。 –