我试图让PHP Curl使用以下代码工作:我拥有使用api的域,我可以对它运行的服务器进行任何更改。
<?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的情况下curl域时,它会返回找到的302,但由于我的域只有HTTPS,这不会是解决方案,它只是回显移动页面。我知道这与使用https的curl有关,但是https://www.google.com可以工作,所以我不知道从哪里开始…
以下是来自php.net的回答。显然,它应该有助于解决未知的协议问题…
如果你得到一个错误代码为35的错误提示"未知SSL协议错误连接到…",可能你使用了错误的密码。
试着把一堆密码精确到如下所示:
$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));
对我有用,对你也有用!注:用于PHP 5.4和cURL 7.26.0。
无法获得Curl工作,我决定使用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/Webservice:
$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服务的限制,祝你好运!
$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));